不要在RxJS中停止超时请求

时间:2019-06-28 09:45:55

标签: angular rxjs

我想实现一个返回Observable,向服务器发送请求并等待响应一段时间的功能。如果在此期间未收到响应,则Observable从某个变量/缓存中发出值。但是,在收到响应后,Observable会再次发出,但带有真实响应。如果及时收到响应,则Observable仅发出一个值(实际响应)。

起初,我尝试使用timeout运算符,但是问题在于该运算符会中断请求并引发异常。现在,我的解决方案看起来很糟糕。我可以在一根烟斗中做吗?

我当前的代码:

`let subject = new Subject();     让完成=假;

let request = this.http.post(`/url`)
  .pipe(
    tap(() => {
      finished = true;
    }),
  ).subscribe((x) => subject.next(x));


timer(3000).subscribe(() => {
  if (!finished) {
      console.log("FROM BUFFER");
      subject.next(bufferedItem);
    }
  }
});

return subject;

1 个答案:

答案 0 :(得分:0)

1)如果您配置了超时,则可以在管道本身内部设置timeout

  pipe(
        timeout(2500),
        catchError(error => of(`Request timed out after: ${duration}`))
      )

2)如果网关超时,则可以根据条件从 catchError 块或retry返回响应

3)计时器将根据您的代码和调度事件每3秒运行一次,请在管道内使用超时代替

4)收到后订阅实际的响应,最后发送响应。