我对当前关于将异步函数和关键字添加await
到下一个 EcmaScript 的讨论感到困惑。
我不明白为什么必须在async
关键字之前有function
关键字。
从我的角度来看,await
关键字等待生成器或承诺完成的结果,一个函数return
就足够了。
await
应该可以简单地在普通函数和生成器函数中使用,而无需额外的async
标记。
如果我需要创建一个结果应该可以用于 an 的函数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
}
如果函数的执行将等待完成空洞函数,直到所有等待都完成,它也可以作为普通函数完成。
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.
}
在我看来,整个函数的执行一直持续到下一个滴答(等待履行)完成。与 Generator-Function 的区别在于 next() 是触发和更改对象的 value 和 done 字段。相反,函数将在完成后简单地返回结果,并且触发器是函数内部触发器,如 while 循环。