在使用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的例子中,一切都还可以。
所以,它有效,但我不明白其中的区别。我不明白为什么这个例子不起作用。
请问有人解释一下吗?
答案 0 :(得分:1)
这是因为当您撰写this.loadQuestion
时,您正在传递对loadQuestion
函数的引用,但您将失去this
上下文。使用箭头功能时,将保留this
上下文。
您还可以编写this.loadQuestion.bind(this)
来获取loadQuestion
函数,并将此上下文固定为当前函数。