为什么 JavaScript 函数需要有关键字“async”? “await”关键字还不够吗? [关闭]

2024-03-10

例如,为什么下面的函数需要“async”?没有使用await是否足够具体以使编译器能够毫无歧义地解析代码?

// Why do we need async here?
async function foo() {
  var user = await getUser(user_id);
  console.log(user);
}

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

主要是为了清楚起见,明确这个函数使用了新的async关键词?


从语言的角度来看,async/awaitJavaScript 中的关键字是这样设计的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(使用前将#替换为@)

为什么 JavaScript 函数需要有关键字“async”? “await”关键字还不够吗? [关闭] 的相关文章

随机推荐