我使用angular2 / rxjs并且很难理解.subscribe()
的onerror回调的有用性。我见过的每个例子都只是打印到控制台,但是,如果我想做其他事情,比如让其他服务处理错误怎么办?简单地调用this.otherservice.handleError
并不能正确绑定this
。所以我需要像this.otherservice.handleError.bind(this.otherservice)
一样调用它。这是预期还是我错过了什么?
@Injectable
export class OtherService {
public foo: Subject<string>;
constructor() {
this.foo = new Subject<string>();
}
handleError(error: any) {
this.foo.next(error);
}
}
@Injectable
export class MyService {
constructor(private http: Http, private otherservice: OtherService) {}
get() {
this.http.get('www.foo.com').subscribe(
() => 'success',
this.otherservice.handleError
)
}
}
谢谢
答案 0 :(得分:2)
基本上,当您将闭包放入订阅时,它会转换为此形式:
observer = {
next: onNextFn,
error: onErrorFn,
complete: onCompleteFn
}
所以当你把:
.subscribe(
() => 'success',
this.otherservice.handleError
)
这意味着:
{
next: () => 'success',
error: this.otherservice.handleError
}
所以this
上下文将是observer
个对象。你需要绑定上下文来维护这些函数的正确上下文。
答案 1 :(得分:-1)
您的错误方法需要一个您未定义的参数
get() {
this.http.get('www.foo.com').subscribe(
(data => 'success'}),
(error) => {
this.otherservice.handleError
)
}