无法在订阅回调中设置未定义的属性



我有一个可观察对象,它返回一个值,我需要在一个函数中操作,所以我认为它会更干净,如果我只是发送函数作为回调,而不是创建一个新的匿名函数。然而,我做了改变,我开始得到这个错误信息:Error: Cannot set properties of undefined (setting 'name').

STACKBLITZ演示
ngOnInit(): void {
this.updateName('First New Name!');
of('Second New Name!')
.pipe(delay(1500))
// .subscribe(name => this.updateName(name)); // Works!
.subscribe(this.updateName); // Doesn't work - Error: Cannot set properties of undefined (setting 'name')
}
updateName(name: string): void {
this.name = name;
}

它应该这样工作吗?为什么会发生这种情况?

updateName切换为lambda/arrow功能

updateName = (name: string) => {
this.name = name;
}

StackBlitz的示例演示


根据箭头函数表达式,箭头函数不拥有this

箭头函数建立"this">

因此,箭头函数作用于

this在作用域中像正常变量一样查找。

来自:@Felix关于如何在回调中访问正确的this的答案

相关内容

最新更新