我在async / await中苦苦挣扎并从Promise返回一个值。
function test () {
return new Promise((resolve, reject) => {
resolve('Hello')
})
}
async function c() {
await test()
}
据我所知,我应该能够通过以下方式获得价值:
console.log(c())
但显然我在这里错过了一点,因为这会返回一个承诺。不应该打印"你好"?在类似的说明中,我不清楚是否需要在将回调包装到async / await之前将回调转换为承诺?
答案 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 将被解决。