我正在用aureliajs开发一个应用程序。开发过程开始了许多个月,现在,后端开发人员希望对其服务进行版本控制。因此,我有一个Web服务可调用以获取每个服务器端(Web api)应用程序的版本,然后针对进一步的请求,调用正确的api地址(包括其版本)。
因此,在app.js中,我请求系统元并将其存储在某处。但是某些组件在此请求完成之前已初始化。因此,他们将找不到初始化的版本并请求错误的服务器数据。
我想让app.js构造函数等到检索到此数据。例如这样的东西:
export class App {
async constructor(...) {
...
await this.initializeHttp();
...
}
initializeHttp(){
// get the system meta from server
}
}
,但此解决方案不适用。因为构造函数不能异步。因此,在检索系统元之前,我应该如何阻止该工作?
问题不是this question的重复项。在这个问题中,外部类中有一个地方等待初始化工作;尽管在我的问题中,主要的问题是等待的位置。因此,问题不仅仅在于构造函数中的异步函数,还在于在异步作业解决之前,阻止所有aurelia作业。
答案 0 :(得分:2)
Aurelia提供了许多处理异步流的方法。如果您的自定义元素是路由组件,则可以利用activate
生命周期来返回promise并异步初始化http服务。
否则,在完成初始化之前,可以使用CompositionTransaction
进一步停止该过程。您可以在https://tungphamblog.wordpress.com/2016/08/15/aurelia-customelement-async/
您还可以在启动Aurelia应用程序时利用configure
函数的异步特性在此处进行初始化:
export function configure(aurelia) {
...
await aurelia.container.get(HttpServiceInitializer).initialize();
}