angular5中HttpClient拦截器catchError调用函数的this指向谁?

发布于 2022-09-06 23:23:33 字数 848 浏览 18 评论 0

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const token = AuthStorage.getItem('mano');
    const token_snap = AuthStorage.getItem('mano_snap');
    req = req.clone({
      setHeaders: {
        'APIKEY': '33726880C9CE84E67A5C27BD4A2CE91AD2',
        'token': token ? token : token_snap || 'mano'
      }
    });
    return next.handle(req).pipe(
      catchError(this.handleError)
    );
  }
  handleError(error: HttpErrorResponse) {
    console.log(this);    // 此时的this指向
    const code = error['status'];
    if (code === 401 || code === 417) {
      Auth.loginOut();
    }
    const err = {url: error['url'], status: error['status'], msg: error['error'].msg};
    return new ErrorObservable(err);
  }

在handleError方法中怎么调用其它方法呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

春夜浅 2022-09-13 23:23:33

指向调用者,非此 class。
如果要指向此 class ,请使用箭头函数

    return next.handle(req).pipe(
      catchError((err) => this.handleError(err))
    );
丑疤怪 2022-09-13 23:23:33

你在intercept最后不是调用了this.handleError么,这个this和handleError方法里面的this就是同一个吧,都是指向当前class对象。你在class里面定义的方法都可以直接用this调用。
或者注入服务以后通过this.xxxService.xxx()调用

暮凉 2022-09-13 23:23:33

你这么写是指向调用者,如果要绑定this,请使用arrow function或者bind。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文