试图找出为什么handleError无法启动。
我们的get api调用结构
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函数来记录它
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);
}在这里,我们记录了一些相关的消息。
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.');
}我的进口品是
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
import { catchError } from 'rxjs/operators';发布于 2018-08-28 14:52:27
它与功能范围和闭包有关。可观察的操作符在幕后创建了许多新的可观察对象,使用构造函数创建新对象也会创建一个新的this上下文。catchError参数不知道this在直接传入时引用组件。
只需将其封装在lambda函数中即可:
catchError(err => this.HandleRequiredErrorResponse(err))
Lambda/fat箭头方法有一个词法this值,因此this将始终引用调用箭头方法的对象。这就减轻了与JS开发相关的大量麻烦。
发布于 2018-08-28 14:52:02
这样做:
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;
}https://stackoverflow.com/questions/52060652
复制相似问题