method VS () => method() - Angular 2 done() 回调函数 subscribe Observable RxJS

method VS () => method() - Angular 2 done() callback function subscribe Observable RxJS

我对使用 RxJS 时 subscribe() 方法中的 done 函数有疑问。

我的应用程序有一个代码:

ngOnInit() {
  this._dictionaryService.loadDictionary()
  .subscribe(
    dictionary => this.dictionary = dictionary,
    error => this.errorMessage = <any>error,
    this.loadQuestion);
}

而且它不起作用。 但是如果改变

this.loadQuestion);

() => this.loadQuestion());

它工作正常。

所以,这段代码:

ngOnInit() {
  this._dictionaryService.loadDictionary()
  .subscribe(
    dictionary => this.dictionary = dictionary,
    error => this.errorMessage = <any>error,
    () => this.loadQuestion());
}

效果很好。

this._dictionaryService.loadDictionary() 从文件中获取 JSON 数据。

this.dictionary 是一个 class 属性。 当我尝试在第一个示例中评估此 属性 时,我得到一个未定义的。 但在 2ns 示例中一切正常。

所以,它有效,但我不明白其中的区别。我不明白为什么 1s 示例不起作用。

有人能给我解释一下吗?

那是因为当您编写 this.loadQuestion 时,您正在传递对函数 loadQuestion 的引用,但您将丢失 this 上下文。当您使用箭头功能时,this 上下文将被保留。

您也可以编写 this.loadQuestion.bind(this) 来获得一个 loadQuestion 函数,其中 this 上下文固定为当前上下文。