7

async/await と Promise から値を返すことに少し苦労しています。

function test () {
  return new Promise((resolve, reject) => {
    resolve('Hello')
  })
} 

async function c() {
  await test()
}

私が理解したように、次のことを行うことで値を取得できるはずです。

console.log(c())

しかし、これは約束を返すので、明らかに私はここでポイントを逃しています。「こんにちは」と出力すべきではありませんか?同様に、async/await でラップする前に、コールバックを promise に変換する必要があるかどうかについても不明です。

4

2 に答える 2

15

これは約束を返すので、ここでポイントがありません。console.log(c())「こんにちは」を印刷すべきではありませんか?

いいえ、async関数は常に promise を返します。非同期コードを魔法のように同期的に実行しているわけではありません。逆に、同期のように見えるコード (awaitキーワードの斑点がありますが) を非同期的に実行するコードに変えます。

非同期関数で結果値を取得できます。

async function c() {
  const result = await test()
  console.log(result);
  return 'World';
}
c().then(console.log);

async/await でラップする前に、コールバックを promise に変換する必要があるかどうかは不明です。

awaitはい、約束しかできません。既存のコールバック API を promise に変換するにはどうすればよいですか? を参照してください。変換の仕方について。

于 2016-08-08T22:20:09.563 に答える