31

質問が述べたように。これを行うことは許可されますか:

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

4 に答える 4

15

手短に:

  1. コンストラクターは、具体的なオブジェクトを提供する必要がある関数です。
  2. Async は promise を返します。具体性とは正反対。
  3. async constructor概念的に矛盾しています。
于 2016-04-08T04:57:40.977 に答える
7

戻り値から約束を取得し、それを待つことができます。

class User {
  constructor() {
    this.promise = this._init()
  }
  
  async _init() {
    const response = await fetch('https://jsonplaceholder.typicode.com/users')
    const users = await response.json()
    this.user = users[Math.floor(Math.random() * users.length)]
  }
}

(async () {
  const user = new User()
  await user.promise
  return user
})().then(u => {
  $('#result').text(JSON.stringify(u.user, null, 2))
}).catch(err => {
  console.error(err)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="result"><code></code></pre>

于 2018-01-02T22:23:15.273 に答える