您好,我从 RxJS 开始,我有下一个问题的解决方案,但我不喜欢它,希望您能提供更好的解决方案:
假设我们有 2 个要切换的流:
- 请求
- 超时
然后,我们想要在它们之间切换,但是当另一个有事件时,一个会恢复,而这个会暂停。例如。成功时我们发出请求,超时,完成时我们发出请求,完成时我们超时,依此类推。
在我的解决方案中,我模拟了一个间隔的请求,并使用了“pausable()”,但我不喜欢这个解决方案的可扩展性:
import Rx from 'rx';
const requestPauser = new Rx.Subject();
const requestStream = Rx.Observable.interval(500).pausable(requestPauser);
const intervalPauser = new Rx.Subject();
const intervalStream = Rx.Observable.interval(500).pausable(intervalPauser);
requestStream.subscribe(function(){
requestStream.pause();
intervalStream.resume();
console.log("request");
});
intervalStream.subscribe(function(){
requestStream.resume();
intervalStream.pause();
console.log("interval");
});
requestStream.resume();
RxJS专家如何解决这个问题?
最佳答案
你已经知道问题的答案了。 我建议切换 map http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap
requestStream.switchMap(()=>Rx.Observable.interval(500));
我不认为真正需要暂停。
更新
由于 OP 需要在第一个可观察对象之后启动第二个可观察对象, 应使用ConcatMap。
关于javascript - RxJS 如何在可观察对象之间切换和暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40930685/