我有一个服务,它接收2个属性http和快餐,当在函数中调用快餐时,它是未定义的,但是当在构造函数中的控制台上打印时,它具有一个值。
这是我的服务
import { throwError as observableThrowError, empty as observableEmpty } from 'rxjs';
import { HttpResponseBase } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { AuthHttp } from './auth-http';
import { Snacks } from './snacks/snacks.service';
@Injectable()
export class BaseService {
private _http: AuthHttp;
private _snack: Snacks;
constructor(http: AuthHttp, snack: Snacks) {
this._http = http;
this._snack = snack;
}
...
protected handleError(error: any) {
// In a real world app, you might use a remote logging infrastructure
let errMsg: string;
if (error instanceof Response || error instanceof HttpResponseBase) {
if (error.status === 401 || error.status === 403 || error.status === 503) {
return observableEmpty();
}
if (error.status === 400 || error.status === 404) {
return observableThrowError(error);
}
const body = error || '';
const err = body || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
if (error.error.message) {
this._snack.error(error.error.message);
}
return observableThrowError(error.error.data);
}
}
有人知道为什么吗?
答案 0 :(得分:3)
如何调用handleError
?它很可能以使this
指向窗口对象或其他对象的方式使用。在这种情况下,将handleError
更改为箭头函数,因为它将this
保留在方法主体内。
protected handleError = (error:any) => {
/* unchanged body of method from your question */
}
答案 1 :(得分:1)
您正在遵循Angular文档中的英雄服务示例。
更改:
catchError(this.handleError)
对此:
catchError(this.handleError.bind(this))
// or this
catchError((err, ob) => this.handleError(err))
这是代码示例中的错误,但是该示例有效,因为它们在示例中未引用this
。