我正在使用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
异步执行,我需要同步它
异步功能出于某种原因是异步的。如果您需要在所有异步调用完成后执行某些操作,则将其移至上一个调用中。您无法在异步调用之外进行其他操作以等待完成。
根据您的情况,通话后您想做的任何事情都应像下面那样移入内部
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);
});
}
在这些异步函数之后,您希望执行的任何操作都应在最后的THEN子句内。这是因为您的代码是异步的。
您可以在“ console.log(” ddd“);”行之后调用一个函数。
并且在该函数内部放入了初始化后需要执行的代码。
欢呼声