async/await 可以在构造函数中使用吗?

新手上路,请多包涵

正如问题所述。我可以这样做吗:

 class MyClass {
    async constructor(){
        return new Promise()
    }
}

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

阅读 1.1k
2 个回答

不试图算命未来的决定,让我们专注于实用性和已知的东西。

ES7 和之前的 ES6 一样,会尝试成为语言的向后兼容扩展。考虑到这一点,向后兼容的构造函数本质上是一个常规函数(具有一些运行时限制),它意味着用 new 关键字调用。当发生这种情况时,函数的返回值得到特殊处理,具体来说,非对象返回值将被忽略并返回新分配的对象,而对象返回值按原样返回(新分配的对象被丢弃)。这样,您的代码将导致返回承诺,并且不会发生“对象构造”。我看不出这有什么实用性,我想如果有人花时间去寻找如何处理这样的代码,它就会被拒绝。

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

扩展 Patrick Roberts 所说的,你不能做你要求的,但你可以做这样的事情:

 class MyClass {
  constructor() {
     //static initialization
  }

  async initialize() {
     await WhatEverYouWant();
  }

  static async create() {
     const o = new MyClass();
     await o.initialize();
     return o;
  }
}

然后在您的代码中创建您的对象,如下所示:

 const obj = await MyClass.create();

原文由 Dave P. 发布,翻译遵循 CC BY-SA 3.0 许可协议

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