2016-12-02 79 views
0

嗨,我开始RxJS,我有下一个问题的解决办法,但我不喜欢它,希望你能提供更好的解决方案:RxJS如何在可观察对象之间切换和暂停?

试想一下,我们有2个数据流,我们要切换:

  • 请求
  • 超时

然后,我们要在它们之间进行切换,但一当其他有一个事件重新开始,这已暂停。例如。我们在成功时做出请求,我们做出超时,完成请求时,完成超时等等。

在我的解决方案,我用模拟的时间间隔要求,我用“可暂停()”,但我不喜欢这个解决方案的可扩展性:

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专家将解决这个问题?

回答

1

你有问题的答案。 我建议switchMap http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap

requestStream.switchMap(()=>Rx.Observable.interval(500)); 

我不认为确实需要一个可暂停。

UPDATE

由于OP需要第二可观察到的所述第一后启动,应使用 ConcatMap。

+0

感谢苏拉杰,有了这个我有一个延迟,但我怎么可以然后创建一个循环,两者都重复? const responseStream = Rx.Observable.fromPromise($ .getJSON('https://api.github.com/users')); ()=> {console.log(1);}); (()=> {console_log(2); }); –

+0

对不起,这是错误的,因为第二次订阅从开始执行,并且必须在第一次完成后执行。 –

+0

好..我的坏..应该仔细看看.. –