在async / await中包装承诺

时间:2016-08-08 21:57:04

标签: node.js promise async-await ecmascript-next

我在async / await中苦苦挣扎并从Promise返回一个值。

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

async function c() {
  await test()
}

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

console.log(c())

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

2 个答案:

答案 0 :(得分:8)

  

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

不,async函数总是返回promises。他们并没有神奇地同步运行异步代码 - 相反,他们将同步代码(尽管用await个关键字编写)转换为异步运行异步代码。

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

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

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

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

答案 1 :(得分:0)

  

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