使用Angular 2中的Observable进行错误处理

时间:2017-03-29 16:33:40

标签: angular

我试图将HTTP请求中可能发生的任何错误传递给我所有服务中的公共日志记录服务:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';

constructor(logger: LoggerService) { }

doSomething(): Observable<any> {
    return this.http
        .post('/foo/bar', {})
        .catch(this.notifyErrors);
}

protected notifyErrors(error: any): Observable<any> {
    this.logger.log(error);

    return Observable.throw(error);
}

不幸的是,在notifyErrors方法中,this丢失了。我已经尝试将其定义为胖箭头,但是我从TS编译器中获得了类型错误。我已经使用了Observable文档中的确切语法。

2 个答案:

答案 0 :(得分:8)

如果您传递函数引用,则需要修复this

 .catch(this.notifyErrors.bind(this));

或者

 .catch(() => this.notifyErrors());

另见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

答案 1 :(得分:-1)

我没有运行您的代码,但如果您想访问它,则可能必须将其传入。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';

constructor(logger: LoggerService) { }

doSomething(): Observable<any> {
    return this.http
        .post('/foo/bar', {})
        .catch(err => {
            this.notifyErrors(err, this);
        });
}

protected notifyErrors(error, that): Observable<any> {
    that.logger.log(error);
    return Observable.throw(error);
}