异步初始化

在某些情况下,我们需要一个实例在被其他依赖调用前需要初始化,如果这个初始化只是读取某个文件,那么可以写成同步方式,而如果这个初始化是从远端拿取数据或者连接某个服务,这个情况下,普通的同步代码就非常的难写。

midway 提供了异步初始化的能力,通过 @init 标签来管理初始化方法。

@init 方法目前只能是一个。

  1. @provide()
  2. export class BaseService {
  3. @config('hello')
  4. config;
  5. @plugin('plugin2')
  6. plugin2;
  7. @init()
  8. async init() {
  9. await new Promise(resolve => {
  10. setTimeout(() => {
  11. this.config.c = 10;
  12. resolve();
  13. }, 100);
  14. });
  15. }
  16. }

注意

@async 装饰器已废弃,所有的 init 方法默认都会异步,同步初始化可以直接在构造器执行,此装饰器没有意义。

只要在方法上标记 @init 装饰器之后,这个时候会自动在实例化之后,通过异步的来调用 @init 标记的方法。