angular-services - 如何等待功能完成?
问题描述
我正在使用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);
});
}
推荐阅读
- c# - 如何使用 Puppeteer-Sharp 在 iframe 中填写表单
- bootstrap-4 - 如何仅为一个元素更改弹出框的 CSS?
- javascript - 将输入值保存在本地状态,但传递给父级以提交表单
- sql-server - 如何根据存储过程过滤具有多个条件的记录
- arduino - Using an Arduino LDR Sensor to switch backgrounds in Processing
- scheme - GIMP:为什么我的 script-fu 没有显示在菜单中?
- date-fns - 日期 fns 格式输出为 utc +0
- c# - 如何从我的 c# web api 填充 angular 7 中的材料下拉列表?
- node.js - Azure Function v2 with ServiceBusQueueTrigger in NodeJS (index.js) - 如果出现异常,如何将消息发送到死信队列
- php - 慢 GroupBy 查询过滤结果 Laravel