【问题标题】:RXJS show error after takesRXJS 在拍摄后显示错误
【发布时间】:2018-01-23 15:13:29
【问题描述】:

在 Angular 2 中,我使用 rxjs 进行 HTTP 调用。目前设置为如下显示错误。

this.http.get("http://www.someapifunction.com/api" , {headers: headers, params: data})
.map(res => res.json())
    .subscribe(
      data => { 
          console.log(data);
      },
      err => {
        console.log('error',err);
        this.showError(err);  
      },
      () => console.log('Request Complete')
    );

如果出现错误,代码将运行一个显示错误消息的函数。

我现在要做的是实现 rxjs retryWhen + take 在打印错误消息之前运行代码 2 次。如下:

this.http.get("http://www.someapifunction.com/api" , {headers: headers, params: data})
.readyWhen(errors => errors.delay(5000).take(2))
.map(res => res.json())
    .subscribe(
      data => { 
          console.log(data);
      },
      err => {
        console.log('error',err);
        this.showError(err);  
      },
      () => console.log('Request Complete')
    );

我遇到的问题是,一旦 API 重试两次不成功,它就没有运行 err 函数。我需要做什么才能运行 err 函数,即 this.showErr(err)??

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    对于retryWhen,每个next 通知意味着它会尝试重新订阅其源 Observable。任何completeerror 通知都会进一步传递。所以你想要做的是,当你已经做了两次尝试时,你只想进一步发送错误。

    错误作为next 通知传递到从retryWhens 回调返回的Observable,因此您希望有条件地将它们转换为error

    例如,您可以这样做:

    .retryWhen(errors => errors
      .map((err, index) => {
        if (index === 2) {
          throw err;
        }
        return err;
      })
      .delay(5000))
    

    【讨论】:

    • 谢谢你,我会试试看的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多