7

我在 async/await 和从 Promise 中返回一个值时有点挣扎。

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

async function c() {
  await test()
}

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

console.log(c())

但显然我在这里遗漏了一点,因为这会带来一个承诺。它不应该打印“你好”吗?在类似的注释中,我不清楚在将回调包装到异步/等待之前是否需要将其转换为承诺?

4

2 回答 2

15

我在这里遗漏了一点,因为这会返回一个承诺。不应该console.log(c())打印“你好”吗?

不,async函数总是返回承诺。它们并没有神奇地同步运行异步代码——相反,它们将看起来同步的代码(尽管带有await关键字)变成了异步运行的代码。

您可以在异步函数中获取结果值:

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

我不清楚在将回调包装到异步/等待之前是否需要将其转换为承诺?

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

于 2016-08-08T22:20:09.563 回答
0

异步函数返回一个 Promise。如果函数抛出错误,Promise 将被拒绝。如果函数返回一个值,则 Promise 将被解析。

于 2018-02-14T13:49:10.150 回答