【问题标题】:how to use angular service inside rxjs retryWhen method如何在 rxjs retryWhen 方法中使用角度服务
【发布时间】:2018-10-10 16:45:53
【问题描述】:

当我使用 Rxjs 运算符的 retryWhen 方法收到 401 错误时,我正在调用 http 服务 3 次。我的问题是当我收到 401 错误作为状态时,我需要进行其他服务以更新令牌,然后重试 http 服务调用 3 次。我无法在 retryWhen 回调方法中使用服务,因为它始终显示为 undefined 。能否请您为此提供解决方案。

 return this.http.get(url, this.getOptions(options)).retryWhen(errors => {
       return errors.mergeMap((error) => {
            console.error('error status....', this, error, error.status);
            if (error.status === 401) {
                // i need to make other service call here 
                this.httpPollingService.updateToken(); // unable to call this call.
                return Observable.of(error);
            } else {
                return Observable.throw(error);
            }
        }).delay(5000).take(2);
    });

【问题讨论】:

  • 您是说this 引用是undefined 还是this.httpPollingServiceundefined
  • 是的this undefined
  • 您可以更改它以包含此代码的位置吗?例如,这是从什么函数返回的,是否在一个类中,等等。需要查看 httpPollingService 分配给对象的位置。
  • 嗨,这里的代码是怎么做的,` post(url: string, body: any, options?: RequestOptionsArgs): Observable { return this.http.post(url, body, this .getOptions(options)).retryWhen(this.generatorNewToken);

标签: angular rxjs5


【解决方案1】:

你需要像这样在 handlerError 方法中抛出错误

handleError(error: HttpErrorResponse) {
    // return an observable with a user-facing error message
    return throwError("Error message...");
  }

【讨论】:

    【解决方案2】:

    我使用以下方式在 401 错误状态时刷新令牌,并使用更新的令牌再次调用相同的请求方法。

     return this.http.post(url, body, headers).catch(initialError => {
                if (initialError.status === 401) {
                    return this.newTokenGenerator().flatMap(newToken => {
                        if (newToken) {
                            headers.set('beare ', newToken);
                            return this.http.post(url, body, headers).take(2);
                        }
                    });
                } else {
                    return Observable.throw(initialError);
                }
            });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2017-03-01
      • 2019-12-15
      相关资源
      最近更新 更多