javascript - RxJS 如何在可观察对象之间切换和暂停?

标签 javascript rxjs observable

您好,我从 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/

相关文章:

javascript - 我如何等待 location.href 在 JavaScript 中完成?

angular - 如何将 Firebase 中的查询快照转换为不同的对象?

angular - 可从字符串中观察到(Angular 2)

arrays - 对可观察数组进行分页

javascript - 发出第一个值然后忽略计时器内发出的值

javascript - 更新 Canvas 元素而不刷新页面

javascript - 函数完成后运行 jquery 行

angular - 如何解决 rxjs Typescript 错误(Ionic 3、angularfire2)

angular - 如何使用 switchMap 而不是嵌套订阅?

javascript - 如何将 Neo4j 查询转换为 GraphQL 查询?