Как дождаться окончания функции? - PullRequest
0 голосов
/ 23 марта 2020

Я использую angular 9, и у меня есть какой-то сервис, который работает асинхронно, и мне нужно его синхронизировать. Мой код выглядит следующим образом:

@Injectable({
  providedIn: 'root'
})
export class GoogleAuthService {

  constructor() {
    console.log('start initialize');
    const libURL = "https://my.js";
    this.loadScript(libURL)
      .then(() => this.loadAuth2Library())
      .then(() => this.initAuth2Client())
      .then(() => {
          console.log("ddd");
          this.next();
        })
      .catch(reason => {
        console.log("hasn't been initialized.", reason);
      });
    console.log('end initialize');
  }
}

, и мне нужно ждать, когда будет выполнен весь конструктор, а затем перейти к следующему шагу, но в этом случае я вижу в консоли:

start initialize
end initialize
ddd

но мне нужно:

start initialize
ddd
end initialize

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

все, что вы хотите выполнить после этих асин c функций, должно быть в последнем предложении THEN. Это потому, что ваш код asyn c.

Вы можете вызвать функцию после строки "console.log (" ddd ");"

и внутри этой функции поставить код, который необходимо выполнить после инициализации.

cheers

0 голосов
/ 23 марта 2020

выполняется асинхронно, и мне нужно синхронизировать его

Асинхронные функции являются асинхронными по определенной причине. Если вам необходимо выполнить что-либо после завершения всех асинхронных вызовов, переместите это в последний вызов. Вы не можете сделать что-то вне асинхронного вызова, чтобы дождаться его завершения.

В вашем случае все, что вы будете делать sh после вызовов, должно быть перемещено внутрь, как следует

constructor() {
  console.log('start initialize');
  const libURL = "https://my.js";
  this.loadScript(libURL)
    .then(() => this.loadAuth2Library())
    .then(() => this.initAuth2Client())
    .then(() => {
        console.log("ddd");
        this.next();
        console.log('end initialize');
      })
    .catch(reason => {
      console.log("hasn't been initialized.", reason);
    });
}    
...