在 async/await 中包装承诺

Wrapping promise in async/await

我在 async/await 和从 Promise 返回值方面遇到了一些困难。

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

async function c() {
  await test()
}

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

console.log(c())

但显然我在这里遗漏了一点,因为这是 returns 一个承诺。它不应该打印 "hello" 吗?同样,我不清楚在将回调包装在 async/await?

之前是否需要将其转换为承诺

I am missing a point here as this returns a promise. Shouldn't console.log(c()) print "hello"?

不,async 功能总是 return 承诺。它们并不是神奇地同步 运行 异步代码 - 相反,它们将看起来同步的代码(尽管散布着 await 关键字)变成异步 运行 代码。

在异步函数中可以得到结果值

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

I am unclear as to whether a callback needs to be converted to a promise before wrapping it in async/await?

是的,你可以 await 只承诺。请参阅 How do I convert an existing callback API to promises? 了解如何进行转换。

Async functions return a Promise. If the function throws an error, the Promise will be rejected. If the function returns a value, the Promise will be resolved.