【问题标题】:Repeating api request every x seconds每 x 秒重复一次 api 请求
【发布时间】:2020-02-02 17:52:02
【问题描述】:

我正在构建聊天应用程序。我想每隔 x 秒获取一次新消息,如下所示: 1. 5秒 2. 10 秒 3. 20 秒 - 有新消息 4. 5秒 5. 10 秒 ...等等。

我厌倦了repeatWhen,但似乎没有重复请求,只发出完成的 observable 的最后一个值。

这是我得到的:

this.delay = 5000;
this.ngxsStore.fetchMessages()
   .pipe(repeatWhen(completed => completed.pipe(delay(this.delay))})
   .subscribe(resp => this.messages = resp);
  fetchMessages(store) {
    return this.api.fetchMesages()
      .pipe(
        tap(resp => {
          if (resp) {
            store.patchState({
              messages: [
                ...store.getState().messages,
                ...resp
              ]
            });
          }
        })
      );
  }

【问题讨论】:

  • repeatWhen 重新订阅其源 Observable,因此它取决于 this.api.fetchMessages() 所做的事情。
  • 事实上我不是在发送请求,而是在ngxs store 中触发操作。更新了代码

标签: angular rxjs


【解决方案1】:

尝试添加 defer()

defer(()=>this.ngxsStore.fetchMessages())
   .pipe(repeatWhen(completed => completed.pipe(delay(this.delay))})
   .subscribe(resp => this.messages = resp);

【讨论】:

    【解决方案2】:

    该技术称为“重试退避”。 你可以在这里找到实现: Exponential backoff implementation with rxjs

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多