我正在 aureliajs 中开发一个应用程序。开发过程已经开始了好几个月,现在后端开发人员希望对其服务进行版本控制。因此,我有一个 Web 服务可以调用来获取每个服务器端(Web api)应用程序的版本,然后,对于进一步的请求,调用正确的 api 地址(包括其版本)。
因此,在 app.js 中,我请求系统元并将其存储在某个地方。但有些组件会在此请求完成之前进行初始化。因此他们不会发现已初始化的版本并请求错误的服务器数据。
我想让 app.js 构造函数等待,直到检索到此数据。例如这样的事情:
export class App {
async constructor(...) {
...
await this.initializeHttp();
...
}
initializeHttp(){
// get the system meta from server
}
}
但该解决方案不适用。因为构造函数不能是异步的。那么,在检索系统元之前,我应该如何阻止该作业呢?
UPDATE
该问题不是重复的这个问题 https://stackoverflow.com/questions/49694779/calling-an-async-function-in-the-constructor。在这个问题中,外部类中有一个地方等待初始化工作;尽管在我的问题中,主要问题是在哪里放置此等待。因此,问题不仅仅是关于构造函数中的异步函数,而是关于阻塞所有 aurelia 作业,直到异步作业解决为止。
Aurelia 提供了多种处理异步流的方法。如果您的自定义元素是路由组件,那么您可以利用activate
返回承诺并异步初始化 http 服务的生命周期。
否则,您可以使用CompositionTransaction
在完成初始化之前进一步停止该过程。您可以在以下位置查看初步示例:https://tungphamblog.wordpress.com/2016/08/15/aurelia-customelement-async/ https://tungphamblog.wordpress.com/2016/08/15/aurelia-customelement-async/
您还可以利用异步特性configure
引导 Aurelia 应用程序以进行初始化的函数:
export function configure(aurelia) {
...
await aurelia.container.get(HttpServiceInitializer).initialize();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)