首页 > 解决方案 > 如何等待功能完成?

问题描述

我正在使用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

标签: angular-servicesangular9

解决方案


异步执行,我需要同步它

异步函数是异步的是有原因的。如果您需要在所有异步调用完成后执行某些操作,则将其移至最后一次调用中。您不能在异步调用之外进行某些操作以等待它完成。

在您的情况下,呼叫后您希望执行的任何操作都应移至内部,如下所示

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);
    });
}    

推荐阅读