在我的ts文件中,我有这个功能:
searchForUser() {
this.userService.getUserByLastName(this.searchString)
.subscribe(
(data: User) => this.searchedUser = data
);
console.log('Firstname: ' + this.searchedUser.firstName);
this.dataService.changeUser(this.searchedUser);
}
在我的html文件中,我从searchingUser获取正确的值。在我的console.log和dataService中没有。为什么?当我进行第二次搜索时,我从之前的搜索中获取值。
这是一个计时问题,将需要响应的所有操作移动到订阅回调中,以便访问您需要的值。
public searchForUser(): void
{
this.userService.getUserByLastName(this.searchString).subscribe((data: User) =>
{
this.searchedUser = data;
console.log('Firstname: ' + this.searchedUser.firstName);
this.dataService.changeUser(this.searchedUser);
});
}
发生此错误的原因是您在订阅中定义之前尝试访问this.searchedUser
。
移动
console.log('Firstname: ' + this.searchedUser.firstName);
this.dataService.changeUser(this.searchedUser);
在subscribe
内:
searchForUser() {
this.userService.getUserByLastName(this.searchString)
.subscribe((data: User) => {
this.searchedUser = data;
console.log('Firstname: ' + this.searchedUser.firstName);
this.dataService.changeUser(this.searchedUser);
});
}
您也可以在这里查看我的回复:https://stackoverflow.com/a/55726693/6713046以获得解释。