RxJS 超时,没有请求返回值时没有错误



我正在进行不返回值的Web api调用,只有它们的HTTP状态代码对我感兴趣。 但我希望这些调用在指定的时间跨度后超时。

因为我错过了阅读文档,所以我在网络调用可观察中使用了超时运算符,如下所示:

this.someProvider.requestStatus(someValue)
    .pipe(timeout(this.timeoutMilliseconds))
    .subscribe(() => console.log("Success"),...)

问题是,我在订阅者函数中收到了成功的网络调用,但即使在超时时间跨度之后,调用仍然失败,因为源可观察对象没有返回值 - 我认为。

当我没有恢复 HTTPResponse 并且只有正文时,有没有办法使用 rxjs 运算符执行此操作 - 如果有的话?

如果源 Observable 在一段时间内不发出,timeout()将引发错误。

但是,如果源完成,则timeout()将停止。因此,您的源可观察this.someProvider.requestStatus()似乎未完成。

尝试使用 catchError 运算符,如下所示:

requestCall(...).pipe(
catchError(err => {
// Here you can check if the error corresponds to the one you don't want emitted
// And if so do nothing, in this case just return an empty array like
if(err.code === something) {
return []
}
// Or return the error
})).subscribe(.....)

这将捕获错误并且不执行任何操作。

 this.someProvider.requestStatus(someValue)
    .pipe(
        timeout(this.timeoutMilliseconds)).subscribe(
        () =>console.log("Success"),
        err=> {
      if (err instanceof  TimeoutError ) {
        console.log("timed out");            
      } else {
        console.log("sth else happened",err);
      }         
    });

正如您在评论中提到的。您可以检查超时操作的错误实例。但您应该注意,如果发生超时,这将取消请求。

相关内容

  • 没有找到相关文章

最新更新