Допустим, пользовательский ввод запускает http-запрос A, с результатом A приложение должно сделать еще один запрос B и показать окончательный результат.
Если получен новый пользовательский ввод, все запросы http должны быть отменены.
Пример, который у меня есть, это цепочка switchMaps. Новые клики прервут и перезапустят первый запрос switchMap. Новый вывод из первого switchMap отменит и перезапустит 2-й. Но щелчок не перезапустит 2-ую карту-свитч.
Буду признателен за предложения о том, как это переосмыслить. Цель - отмена запросов, а фильтрация / игнорирование результатов - обман.).
http://jsbin.com/roranoh/4/edit?js,console
function obFc(name) {
return {
next: function (x) { console.log(name+ ' - ' + x) },
error: function (err) { console.log(name +' error ' + err) },
complete: function () { console.log(name +' done') },
}
};
function simulateHttp(val: any, delay:number) {
return Rx.Observable.of(val).delay(delay);
}
click1$ = Rx.Observable.of('1').delay(1000);
click2$ = Rx.Observable.of('2').delay(4000);
click$ = Rx.Observable.merge( click1$, click2$ );
click$.subscribe( obFc('Click') );
click$
.switchMap( (val) => {
console.log('Fetching data A' + val);
return simulateHttp(val + " A", 2000);
})
.do((v)=> console.log('received:' + v))
.switchMap( val => {
console.log('Fetching data B')
return simulateHttp( val + " B", 2000);
})
.subscribe( obFc('Finished ') );
PS: я видел несколько похожих вопросов, хотя они кажутся очень конкретными, я старался быть как можно более общим.