Angular RXJS在拍摄后显示错误

Angular RXJS在拍摄后显示错误,angular,rxjs,Angular,Rxjs,在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 => {

在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.bather(err)?

retryWhen
每次
next
通知都意味着它试图重新订阅其可观测的源。任何
完成
错误
通知只会进一步传递。因此,您要做的是,当您已经进行了两次尝试时,您只想进一步发送错误

错误作为
next
通知传递到从
retryWhen
s回调返回的可观察对象中,因此您希望有条件地将它们转换为
error

例如,您可以这样做:

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

谢谢你,我会试一试的!