编程语言
首页 > 编程语言> > 为什么javascript函数需要关键字“async”? “await”关键字不够用吗?

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

作者:互联网

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

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

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

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

解决方法:

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

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

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

更清晰的解决方案是引入一对关键字,因此async(仅用于函数和lambdas,并且不含糊)启用await关键字,但仅在该范围内.函数*表示生成器有类似的好处,而不仅仅是收益率的存在.

它不仅不那么模糊(保持与使用等待其他东西的代码的向后兼容性),而且软件和人类也更容易解析.

标签:javascript,async-await,ecmascript-next
来源: https://codeday.me/bug/20190516/1115953.html