Skip to content

Instantly share code, notes, and snippets.

@dmitry-vsl
Created April 21, 2017 23:55
Show Gist options
  • Save dmitry-vsl/d46cfd215359f18686e2ae9565e09041 to your computer and use it in GitHub Desktop.
Save dmitry-vsl/d46cfd215359f18686e2ae9565e09041 to your computer and use it in GitHub Desktop.
/*
- generate requests on timer
- if timer signals before request completed, then wait until request complete
- if timer signals multiple times before request completed then issue signle
request after getting response
Example timeline
timer: 0 1 2 2
request made: r1 r2 r3
response: r1 r2
*/
var Bacon = require('baconjs')
var timer = Bacon.interval(1000, 'timer')
timer.subscribe(() => console.log('timer', timeFrom()))
var initialTime = new Date().getTime()
var timeFrom = () => (new Date().getTime() - initialTime)/1000
function request(){
// emulate varying response times with Math.random
var delay = 4000*Math.random()
console.log('mk request', delay/1000, timeFrom())
return Bacon.later(delay, delay/1000)
}
function responses(){
var rq = request()
return Bacon.zipAsArray(timer.first(), rq).flatMap(val => {
return Bacon.once(val).concat(responses())
})
}
responses().subscribe(val => {})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment