我目前正在使用RxJS Observables / Subscription来执行HTTP请求,类似于下面的代码演示:
this.waiting = true;
this.doSomething().subscribe(
(result) => {
this.waiting = false;
this.showResult= true;
}
);
我真正想要做的是,只在预定的时间内设置此等待为真。换句话说,你只是在等待'如果Observable在30秒内没有回来。想知道如何实现这一目标。我看到有一个.timer方法可用,但只能在这么长的时间后开始订阅?
答案 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值。