关于添加异步函数和关键字await
到下一个EcmaScript的讨论,我感到困惑。
我不明白为什么在function
关键字之前需要有async
关键字。
在我看来,await
关键字等待生成器或承诺已完成的结果,函数的return
应该足够了。
await
应该可以在普通函数和生成器函数中简单地使用,而无需其他async
标记。
如果我需要创建一个可以用作await
结果的函数,我可以简单地使用一个promise。
我提出疑问的原因是这篇好文章,其中包含以下示例:
async function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// some more logic
}
如果函数的执行需要等待所有的await关键字都被满足后才能完成,则也可以将其作为常规函数来执行。
function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// return because createUser() and getFacebookFriends() and maybe inviteFacebookFriends() finished their awaited result.
}
我认为整个函数执行会一直等待直到下一个tick(等待结果)完成。与Generator-Function的区别在于,next()触发并更改对象的值和done字段。相反,函数将在完成时仅返回结果,并且触发器是函数内部触发器,例如while循环。
async
和生成器函数之间的区别? - Bergiasync
-await
语法。 - Bergi