Aureliajs 在 App Constructor 上等待数据

Aureliajs Waiting For Data on App Constructor

我正在使用 aureliajs 开发一个应用程序。开发过程已经开始好几个月了,现在,后端开发人员想要对他们的服务进行版本控制。所以我有一个 web 服务可以调用以获取每个服务器端 (web api) 应用程序的版本,然后,对于进一步的请求,调用正确的 api 地址,包括它的版本。

因此,在 app.js 中,我请求系统元数据并将其存储在某处。但是一些组件在这个请求完成之前就已经初始化了。所以他们不会发现版本初始化和请求错误的服务器数据。

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

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

    await this.initializeHttp();

    ...
  }

  initializeHttp(){
    // get the system meta from server
  }
}

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

更新

该问题不是 的重复问题。在那个问题中,外部 class 中有一个地方可以等待初始化作业;虽然在我的问题中,主要问题是,把这个等待放在哪里。所以问题不仅仅是关于构造函数中的异步函数,而是关于在异步作业解决之前阻止所有 aurelia 作业。

Aurelia 提供了很多处理异步流的方法。如果您的自定义元素是路由组件,那么您可以利用 activate 生命周期来 return 承诺并异步初始化 http 服务。

否则,您可以使用 CompositionTransaction 在完成初始化之前进一步停止进程。您可以在 https://tungphamblog.wordpress.com/2016/08/15/aurelia-customelement-async/

查看初步示例

您还可以利用 configure 函数的异步特性来引导 Aurelia 应用程序在那里进行初始化:

export function configure(aurelia) {
  ...
  await aurelia.container.get(HttpServiceInitializer).initialize();
}