在async/await中包装承诺

cyb*_*bat 3 node.js promise async-await ecmascript-next

我正在努力使用async/await并从Promise返回一个值.

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

async function c() {
  await test()
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该能够通过以下方式获得价值:

console.log(c())
Run Code Online (Sandbox Code Playgroud)

但显然我在这里错过了一点,因为这会回报一个承诺.不应该打印"你好"吗?在类似的说明中,我不清楚回调是否需要在将其包装在async/await之前转换为promise?

Ber*_*rgi 8

我在这里错过了一点,因为这会返回一个承诺.不应该console.log(c())打印"你好"?

不,async功能总是返回承诺.他们并没有同步地神奇地运行异步代码 - 相反,他们将同步代码(虽然有点await关键字)变成异步运行代码.

你可以得到的结果值异步函数:

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

我不清楚回调是否需要在将其包装到async/await之前转换为promise?

是的,你await只能承诺.请参阅如何将现有回调API转换为承诺?如何进行转换.