在下面的代码示例中,函数a
返回一个promise。返回后使用await
是useless,但我认为(并根据examples),返回promise的函数仍应是async
函数。但是,即使我没有在async
中添加a
关键字,但如果在功能await
中使用了b
,它仍然可以工作。如果我不在a()
内等待b
,那么bRes
是一个承诺对象,而不是5
。因此,这意味着我可以有无数个函数,例如a
,它们会返回Promise,并且只要调用此无限链await
的第一个函数得到结果,那么我就不需要包装async
的中间功能?
const getPromise = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('promise finished')
resolve(5)
}, 2000)
})
const a = () => {
console.log('from a')
return getPromise()
}
const b = async () => {
const bRes = await a()
console.log('bRes', bRes)
}
b()
答案 0 :(得分:2)
Taxi Driver | Drama
Taxi Driver | Criminal
的函数内使用await
async
的函数将返回诺言async
)来创建承诺new Promise
一个诺言由于await
返回承诺,并且a()
为b
,因此您可以async
在await
内a()
的返回值。 / p>
答案 1 :(得分:1)
除非在其中使用了async
关键字,否则函数无需使用await
关键字。
如果在标记为await
的函数之外使用async
关键字,则该关键字将不起作用。这是async
关键字的唯一技术用途(如果您出于文档目的使用它,那很好,但除此之外没有做任何事情)。
所有其他函数,例如同步函数,promise生成器,事件处理程序,观察者处理程序或只是普通的旧回调,都不需要标记async
(除非您在其中使用await)。