我有一个从服务器检索数据的服务。此数据用于填充页面。我想每 5 秒刷新一次页面。我尝试了一个非常简单setInterval()
的方法,但是所有对服务器的调用都是一个接一个,而无需等待前一个调用完成。例如,当服务器出现故障时,这是一个问题。我现在不知道哪一个是最好的解决方案,也许是 rxjs 和 observables。
问问题
455 次
1 回答
1
你可以做这样简单的事情:
Rx.Observable.interval(5000)
.flatMap(() => this.http.whateverYouCall)
.map(resp => resp.json())
.subscribe((val) => //do something here with the result)
这将每 5 秒拨打一次新电话。如果您真的只想在前一个呼叫后 5 秒创建一个新呼叫,请告诉我,我会更新这个呼叫。
如果您只想在上一个呼叫结束时开始下一个呼叫,您可以这样做:
let subject$ = new Rx.BehaviorSubject("a");
subject$
.concatMap(() => fakeHttp().concat(Rx.Observable.empty().delay(5000)))
.do(() => subject$.next("a"))
.subscribe((val) => console.log(val));
jsbin:http ://jsbin.com/fufuqid/13/edit?js,console 您会看到每 7 秒记录一次“b”。模拟调用 2 秒,刷新前 5 秒。
于 2016-10-20T14:42:36.550 回答