首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >this.handleError不是一个函数

this.handleError不是一个函数
EN

Stack Overflow用户
提问于 2018-08-28 14:46:39
回答 2查看 4.5K关注 0票数 3

试图找出为什么handleError无法启动。

我们的get api调用结构

代码语言:javascript
复制
get(relativeUrl: string, _httpOptions?: any) {

    var response = this.http.get(baseUrl + relativeUrl, _httpOptions)
          .pipe(
          catchError(this.HandleRequiredErrorResponse)
        ).toPromise();

            var responsedata = new ResponseData;

            responsedata.statusCode = '200';
            responsedata.response = response;

            return responsedata;
}

这个函数处理我们的自定义错误,如果除了我们需要的错误之外,我们通过调用handleError函数来记录它

代码语言:javascript
复制
HandleRequiredErrorResponse(errorReponse: HttpErrorResponse) {
    var response = new ResponseData;

    if (errorReponse.status == 400) {
      response.statusCode = errorReponse.status.toString();
      response.response = errorReponse.error;
    }
    else if (errorReponse.status == 404) {
      response.statusCode = errorReponse.status.toString();
      response.response = errorReponse.error;
    }
    else {
      console.log(errorReponse)
      let err = this.handleError(errorReponse);//handleError is undefined

      return err;
    }

    return new ErrorObservable(response);
  }

在这里,我们记录了一些相关的消息。

代码语言:javascript
复制
handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
      console.error('An error occurred:', error.error.message);
    } else {
      console.error(
        `Backend returned code ${error.status}, ` +
        `body was: ${error.error}`);
    }
    return new ErrorObservable(
      'Something bad happened; please try again later.');
  }

我的进口品是

代码语言:javascript
复制
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
import { catchError } from 'rxjs/operators';
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-28 14:52:27

它与功能范围和闭包有关。可观察的操作符在幕后创建了许多新的可观察对象,使用构造函数创建新对象也会创建一个新的this上下文。catchError参数不知道this在直接传入时引用组件。

只需将其封装在lambda函数中即可:

catchError(err => this.HandleRequiredErrorResponse(err))

Lambda/fat箭头方法有一个词法this值,因此this将始终引用调用箭头方法的对象。这就减轻了与JS开发相关的大量麻烦。

票数 5
EN

Stack Overflow用户

发布于 2018-08-28 14:52:02

这样做:

代码语言:javascript
复制
get(relativeUrl: string, _httpOptions?: any) {

var response = this.http.get(baseUrl + relativeUrl, _httpOptions)
      .pipe(
      catchError(this.HandleRequiredErrorResponse.bind(this))
    ).toPromise();

        var responsedata = new ResponseData;

        responsedata.statusCode = '200';
        responsedata.response = response;

        return responsedata;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52060652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档