Angular: Console.log(11) печатается первым, затем console.log(1). почему?

#angular #typescript

#angular #typescript

Вопрос:

У меня есть простой метод отправки, при котором сначала печатается Console.log (11), а затем console.log (1). Мне нужно, почему он ведет себя таким образом.

 submit(value) {

    this.secServise.getUserById(this.currentUser.mgId).subscribe( uAddrs => {
      this.tempUser = uAddrs;
      console.log(1);
    });

    if (value[this.keyPwd] !== value[this.keyCPwd]) {
      this.messageService.add({
         severity: 'error',
         summary: 'Password and Confirm Password should match',
         detail: '' 
      });
    } else {
      console.log(11);
    }
}
  

Комментарии:

1. Потому что subscription это асинхронный процесс.

Ответ №1:

Это не имеет ничего общего с Angular, а скорее с тем, как работает Javascript. В основном ваш код не синхронен, как вы ожидали, потому что ваш getUserById вызов, скорее всего, асинхронный.

Это означает, что Javascript не будет ждать, пока не будет вызвана getUserById функция обратного вызова. Вместо этого он просто продолжит работу со следующей строкой кода, которая, по-видимому, в данном случае является console.log(11) строкой, поскольку операторы if оцениваются как false .

Комментарии:

1. как мне это преодолеть?

2. Просматривая код, которым вы поделились, вы могли бы переместить весь код в функцию, вызываемую подписчиком.