RxJS检测到长时间运行的订阅

时间:2017-06-30 08:40:47

标签: javascript rxjs

我目前正在使用RxJS Observables / Subscription来执行HTTP请求,类似于下面的代码演示:

this.waiting = true;
this.doSomething().subscribe(
      (result) => {
        this.waiting = false;
        this.showResult= true;
      }
);

我真正想要做的是,只在预定的时间内设置此等待为真。换句话说,你只是在等待'如果Observable在30秒内没有回来。想知道如何实现这一目标。我看到有一个.timer方法可用,但只能在这么长的时间后开始订阅?

2 个答案:

答案 0 :(得分:3)

查看timeout()timeoutWith()运营商。它们没有文档,但是从它们的参数中你可以猜出它们的作用。

timeout()运算符在一段时间不活动后发送error通知。

timeoutWith()我认为让你在一段时间不活动之后用另一个Observable替换源Observable。

最后,如果你想避免使用这两个操作符,你可以使用Observable.race仅在内部订阅第一个发出的Observable:

Observable.race(Observable.timer(30 * 1000).take(1), this.doSomething())

答案 1 :(得分:0)

我不知道这样做的运算符,但这个js代码应该

const source = Rx.Observable.of(1).delay(1000);
const sub = source.subscribe(val => console.log(val));
setTimeout(() => {
    sub.unsubscribe();
    console.log('timeout')
}, 500);

你可以玩延迟和setTimeout值。