Skip to content

Instantly share code, notes, and snippets.

@ipassynk
Created September 22, 2016 11:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ipassynk/8dc5e3078420242893bb6deec6868547 to your computer and use it in GitHub Desktop.
Save ipassynk/8dc5e3078420242893bb6deec6868547 to your computer and use it in GitHub Desktop.
const Observable = Rx.Observable;
let input1$ = Observable.fromEvent(document.querySelector('#b1'), 'click').mapTo('1');
let input2$ = Observable.fromEvent(document.querySelector('#b2'), 'click').mapTo('2');
let input3$ = Observable.fromEvent(document.querySelector('#b3'), 'click').mapTo('3');
let input4$ = Observable.fromEvent(document.querySelector('#b4'), 'click').mapTo('4');
let inputs$ = Observable.merge(input1$ ,input2$ ,input3$ ,input4$);
function getPromise(x) {
console.log('start promise');
return new Promise(resolve => {
setTimeout(()=>{
console.log('resolve promise');
resolve(x);
}, 5000);
});};
/*
four buttons generates events that should be buffered
and send to a remote server, howevere the server can
avccept only one request per time
*/
inputs$
.buffer(inputs$.throttleTime(2000))
.filter(x=>x.length>0)
.concatMap(x=>{
let p = getPromise(x);
return Observable.fromPromise(p)
})
.subscribe(x=>{console.log(x);});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment