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

时间:2019-03-18 11:10:23

标签: javascript ecmascript-6 promise async-await 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
  }
}

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

更新

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

1 个答案:

答案 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();
}