Aureliajs在App构造函数上等待数据

Con*_*ver 5 javascript promise async-await ecmascript-6 aurelia

我正在用aureliajs开发一个应用程序。开发过程开始了许多个月,现在,后端开发人员希望对他们的服务进行版本控制。因此,我有一个Web服务可调用以获取每个服务器端(Web api)应用程序的版本,然后针对进一步的请求,调用正确的api地址(包括其版本)。

因此,在app.js中,我请求系统元并将其存储在某处。但是某些组件在此请求完成之前已初始化。因此,他们将找不到初始化的版本并请求错误的服务器数据。

我想让app.js构造函数等到检索到此数据。例如这样的事情:

export class App {
  async constructor(...) {
    ...

    await this.initializeHttp();

    ...
  }

  initializeHttp(){
    // get the system meta from server
  }
}
Run Code Online (Sandbox Code Playgroud)

但是此解决方案不适用。因为构造函数不能异步。因此,在检索系统元之前,我应该如何阻止该工作?

更新

这个问题不是这个问题的重复。在这个问题中,外部类中有一个地方等待初始化工作;尽管在我的问题中,主要的问题是等待的位置。因此,问题不仅仅在于构造函数中的异步函数,还在于在异步作业解决之前,阻止所有aurelia作业。

big*_*pon 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();
}
Run Code Online (Sandbox Code Playgroud)