gpt4 book ai didi

javascript - rxjs 订阅 onerror 绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 04:26:14 24 4
gpt4 key购买 nike

我正在使用 angular2/rxjs,并且很难理解 .subscribe() 的 onerror 回调的有用性。我见过的每个示例都只是打印到控制台,但是,如果我想做其他事情(例如让另一个服务处理错误)怎么办?仅调用 this.otherservice.handleError 无法正确绑定(bind) 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
)
}
}

谢谢

最佳答案

基本上,当你使用闭包进行订阅时,它会转换为以下形式:

observer = {
next: onNextFn,
error: onErrorFn,
complete: onCompleteFn
}

所以当你输入:

 .subscribe(
() => 'success',
this.otherservice.handleError
)

这意味着:

{
next: () => 'success',
error: this.otherservice.handleError
}

所以this上下文将是observer对象。您需要绑定(bind)上下文来维护这些函数的正确上下文。

关于javascript - rxjs 订阅 onerror 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com