如何等待功能完成?

问题描述 投票:0回答:2

我正在使用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-services angular9
2个回答
0
投票

异步执行,我需要同步它

异步功能出于某种原因是异步的。如果您需要在所有异步调用完成后执行某些操作,则将其移至上一个调用中。您无法在异步调用之外进行其他操作以等待完成。

根据您的情况,通话后您想做的任何事情都应像下面那样移入内部

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

0
投票

在这些异步函数之后,您希望执行的任何操作都应在最后的THEN子句内。这是因为您的代码是异步的。

您可以在“ console.log(” ddd“);”行之后调用一个函数。

并且在该函数内部放入了初始化后需要执行的代码。

欢呼声

© www.soinside.com 2019 - 2024. All rights reserved.