为什么javascript函数需要关键字"async"?"await"关键字不够用吗?

phz*_*b0x 5 javascript async-await ecmascript-next

例如,为什么下面的函数需要"async"..是不是使用等待特定的足够的编译器来解析代码而没有歧义?

# Why do we need async here
async function foo() {
  var user = await getUser(user_id);
  console.log(user);
}
Run Code Online (Sandbox Code Playgroud)

是出于向后兼容的原因吗?(我想不出任何在标准Javascript中使用await键盘的代码..)?

是否主要是为了清楚地表明此函数使用新的async关键字?谢谢

Ste*_*ary 7

从语言的角度来看,JavaScript中的async/ awaitkeywords的设计与它们在C#中的工作方式非常接近.

我有一篇旧的博客文章,描述了为什么async在C#中明确添加的一些讨论:请参阅Inferring "async"此处.简而言之,添加关键字是对语言的潜在重大变化; 想象一下使用某种var await = false;或那种性质的现有应用程序.

或者,作为一个如何更加模糊的例子var await = function() {};,将被用作await (x);.看看用法await (x);,编译器很难决定使用什么样的表达式.你可以说这await是一个关键字,除非在这个名称的范围内有一个变量,但这真的很毛茸茸.

更清晰的解决方案是引入一关键字,因此async(仅用于函数和lambda,并且不含糊)启用await关键字,但仅在该范围内.function*表示发电机有类似的好处,而不仅仅是存在yield.

它不仅不那么模糊(保持与await用于其他事物的代码的向后兼容性),而且软件人类也更容易解析.