TypeScript 中的异步构造函数?

新手上路,请多包涵

我在构造函数期间有一些我想要的设置,但似乎不允许

没有异步常量

这意味着我不能使用:

等待

我还应该怎么做?

目前我在外面有这样的东西,但这不能保证按照我想要的顺序运行?

 async function run() {
  let topic;
  debug("new TopicsModel");
  try {
    topic = new TopicsModel();
  } catch (err) {
    debug("err", err);
  }

  await topic.setup();

原文由 dcsan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

构造函数必须返回它“构造”的类的实例。因此,不可能返回 Promise<...> 并等待它。

你可以:

  1. 进行公开设置 async

  2. 不要从构造函数中调用它。

  3. 每当您想“完成”对象构造时调用它。

    async function run()
   {
       let topic;
       debug("new TopicsModel");
       try
       {
           topic = new TopicsModel();
           await topic.setup();
       }
       catch (err)
       {
           debug("err", err);
       }
   }

原文由 Amid 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用私有构造函数和静态工厂方法 FTW。这是 执行任何验证逻辑或数据丰富的最佳方式,从客户端封装。

 class Topic {
  public static async create(id: string): Promise<Topic> {
    const topic = new Topic(id);
    await topic.populate();
    return topic;
  }

  private constructor(private id: string) {
    // ...
  }

  private async populate(): Promise<void> {
    // Do something async. Access `this.id` and any other instance fields
  }
}

// To instantiate a Topic
const topic = await Topic.create();

原文由 Hady 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进