Angular:订阅后仍未获得价值

时间:2019-04-23 11:56:49

标签: angular typescript observable subscribe

在我的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文件中,我从searchedUser获取了正确的值。在我的console.log和dataService中没有。为什么? 当我进行第二次搜索时,我从以前的搜索中获取了值。

2 个答案:

答案 0 :(得分:2)

移动

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以获得解释。

答案 1 :(得分:1)

这是一个计时问题,请将所有需要响应的操作移回订阅回调中,以访问所需的值。

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之前对其进行访问。