如果要使用await,为什么Javascript(ES.next)会强制我将一个函数声明为异步函数?

张仁南

似乎编译器/解析器应该足够聪明,可以检测某个函数是否使用了await它,然后它自动成为一个async函数。

为什么我被迫输入async关键字?它增加了混乱,并且很多时候我忘记添加它,但是却出现错误,因此我不得不去添加它。

让编译器async在看到该功能自动将该功能升级为新功能,await而又只是为每个人省去了处理该功能的麻烦,会不会有任何不利之处

他们

将异步函数与ES6生成器函数进行比较,这很明显:

function* x() {} // Generator function without 'yield'
Object.getPrototypeOf(x); // returns GeneratorFunction

生成器函数在本质上不同于传统函数,但是它们不需要yield在体内表达。ES6提案中实际上存在一个错误,该错误指出,如果generator函数不包含,则是语法错误yield,但很快就将其修复:

一个重要的用例是使用虚拟发生器进行原型制作。或者您注释掉调试收益的情况。那不应该使程序非法。

异步函数也是如此:根据草案,异步函数不需要awaits在其主体中具有与传统函数不同的功能。

假设您发表评论await然后,解释器应该将您的异步函数解析为传统函数,并可能破坏您的整个代码吗?最好不要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么将匿名JavaScript函数声明为函数参数?

如果将一个类声明为final,则必须将这些方法声明为final

如果我只能定义一个变量,为什么要使用It.is <>或It.IsAny <>?

因为我不能在顶层运行 await,我必须把它放到一个异步函数中——为什么我可以直接调用那个异步函数?

为什么 Javascript 函数即使使用 await 也会立即返回?

为什么一个函数在调用另一个异步函数时是异步的?

如果我在返回一个函数的函数中延迟一个函数会怎样?订购如何?

什么是virtualenv,为什么我要使用一个?

为什么显式声明一个特殊成员函数会禁止其他成员函数的生成

为什么将类的特殊函数显式声明为“默认”

为什么将函数参数声明为final?

在调用声明为@MainActor 的异步函数的任务中使用@MainActor

为什么我不告诉我,Python Threading会运行一个函数?

为什么需要使用 await 关键字来调用异步方法

为什么我的异步函数返回一个 Future<int> 在等待每个时停顿?

为什么我的异步函数返回一个空数组

如果我们已经得到一个随机数组,为什么要使用随机快速排序?

为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

我在声明一个函数,但是它不可调用,为什么?

为什么我不能在Java中声明一个函数数组?

为什么不将函数声明为type.CoroutineType类型的异步函数?

IIFE:如果我返回一个警报而不将它包装在一个函数中,为什么我的代码会忽略 addEventListener?

如果bash函数始终未填充参数,为什么要使用圆括号呢?

为什么要使用lambda与1行函数声明?

为什么要使用 list() 构造函数?

为什么要使用函数原型?

为什么要使用发散函数?

为什么要使用move构造函数?

为什么要使用QUOTENAME函数?