鉴于以下情况,我期望length
s:
const foo = (...args) => { }
console.log(foo.length) // 0
const asyncFoo = async (...args) => { }
console.log(asyncFoo.length) // 1
但async
修饰符有所不同。这是根据ES7规范async
更改长度参数吗?
注意:这不仅仅是深奥的。我被绊倒了,因为Mocha的行为有所不同,具体取决于测试函数的length
。当我将测试包装函数更改为async
时,我无法弄清楚为什么一切都停止了。
答案 0 :(得分:2)
如果你看看Babel如何转换async
函数,这个结果会更有意义。您可以看到a simple example here。
你可以看到原始的transiled函数没有方法的参数(因此length
为0)。
另一方面,转换后的方法最终成为(即使它实际上并不需要):
function f(_x) {
return _ref.apply(this, arguments);
};
由于生成的函数只有一个参数,length
为1。
此行为似乎不是async
/ await
规范的一部分(可在https://tc39.github.io/ecmascript-asyncawait/#async-function-instances-length找到)