例如,为什么下面的函数需要“async”..是不是使用等待特定的足够的编译器来解析代码而没有歧义?
# Why do we need async here
async function foo() {
var user = await getUser(user_id);
console.log(user);
}
是出于向后兼容的原因吗? (我想不出任何在标准Javascript中使用await键盘的代码..)?
主要是为了清楚明白这个函数是否使用了新的async关键字? 感谢
答案 0 :(得分:6)
从语言角度来看,JavaScript中的async
/ await
个关键字与
我有一篇旧帖子,其中介绍了为什么在{C#:see Inferring "async"
here中明确添加了async
的一些讨论。简而言之,添加关键字是对语言的潜在重大变化;想象一下使用var await = false;
或类似性质的现有应用程序。
或者,有关如何更加含糊不清的示例var await = function() {};
,它将用作await (x);
。查看用法await (x);
,编译器很难决定使用哪种表达式。您可以说await
是一个关键字,除非在该范围内有一个带有该名称的变量,但这真的很毛茸茸。
更清晰的解决方案是引入对关键字,因此async
(仅用于函数和lambda,并且不含糊)启用await
关键字,但仅限于该范围内。让function*
表示生成器有类似的好处,而不仅仅是yield
的存在。
它不仅不那么模糊(保持与其他东西使用await
的代码的向后兼容性),但对于和软件的人来说也更容易解析。