例如,为什么下面的函数需要“async”?没有使用await是否足够具体以使编译器能够毫无歧义地解析代码?
// Why do we need async here?
async function foo() {
var user = await getUser(user_id);
console.log(user);
}
是出于向后兼容的原因吗? (我想不出任何使用await标准 JavaScript 中的键盘...)?
主要是为了清楚起见,明确这个函数使用了新的async关键词?
从语言的角度来看,async
/await
JavaScript 中的关键字是这样设计的very与 C# 中的工作方式非常接近。
我有一篇旧博客文章描述了一些关于原因的讨论async
在 C# 中显式添加:see Inferring "async" here http://blog.stephencleary.com/2011/09/async-ctp-why-do-keywords-work-that-way.html。简而言之,添加关键字可能对语言造成重大改变;想象一个现有的应用程序使用var await = false;
或类似性质的东西。
或者,举个例子来说明这可能更加模糊,var await = function() {};
,这将被用作await (x);
。看看使用情况await (x);
,编译器将很难决定那是什么类型的表达式。你可能会争辩说await
是一个关键字unless作用域中有一个具有该名称的变量,但这确实很麻烦。
一个更干净的解决方案是引入一个pair的关键字,所以async
(仅用于函数和 lambda,并且没有歧义)启用await
关键字,但仅限于该范围内。有类似的好处function*
表示生成器,而不仅仅是存在yield
.
它不仅不那么模糊(保持与使用的代码的向后兼容性await
对于其他事情),但这两个软件也更容易and人类来解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)