0

我有一个从服务器检索数据的服务。此数据用于填充页面。我想每 5 秒刷新一次页面。我尝试了一个非常简单setInterval() 的方法,但是所有对服务器的调用都是一个接一个,而无需等待前一个调用完成。例如,当服务器出现故障时,这是一个问题。我现在不知道哪一个是最好的解决方案,也许是 rxjs 和 observables。

4

1 回答 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 回答