Angular: все еще не получает значение после подписки - PullRequest
1 голос
/ 23 апреля 2019

В моем 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-файле я получаю правильные значения от searchUser.В моем console.log и dataService нет.Зачем?Когда я делаю второй поиск, я получаю значения из поиска раньше.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

ход

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 голос
/ 23 апреля 2019

Это проблема синхронизации, переместите все действия, требующие ответа, в обратный вызов подписки, чтобы получить доступ к нужному значению.

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 до того, как он был определен в подписке.

...