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

新手上路,请多包涵

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

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

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

阅读 1.2k
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 许可协议

推荐问题