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

时间:2016-12-23 19:54:38

标签: angular typescript rxjs observable subscribe

在使用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是一个类属性。 当我在第一个例子中尝试评估这个属性时,我得到一个未定义的。 但在2ns的例子中,一切都还可以。

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

请问有人解释一下吗?

1 个答案:

答案 0 :(得分:1)

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

您还可以编写this.loadQuestion.bind(this)来获取loadQuestion函数,并将此上下文固定为当前函数。