AsyncFunction未定义,但MDN记录了它的用法

时间:2017-09-08 14:13:01

标签: javascript ecmascript-6 async-await standards

有一篇文章AsyncFunction - JavaScript on MDN。它显示以下代码段:

new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)

然而,在Mozzila Firefox 55和Google Chrome中,根本没有定义此构造函数:

enter image description here enter image description here

我发现(async function() {}).constructor确实是AsyncFunction,但为什么我无法在全球范围内看到它?

2 个答案:

答案 0 :(得分:5)

正如Mozilla文档中所提到的“请注意,AsyncFunction不是全局对象。”

因此,您无法像其他全局构造函数一样将其作为window对象的属性进行访问。它必须通过询问async函数的实例来获得:

来自文档:

const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;

答案 1 :(得分:2)

文档本身很困惑,所以人们也很困惑。

MDN文档告诉我们 AsyncFunction不是全局对象,但它们会在全局对象引用中列出它!糟糕!

这会导致意外行为。这有效:

> f1 = function () {};
[Function: f1]
> f1 instanceof Function
true

但这不是:

> f2 = async function () {}
[AsyncFunction: f2]
> f2 instanceof AsyncFunction
ReferenceError: AsyncFunction is not defined

我写了一个你可以使用的unexposed模块:

它基本上像帕特里克的答案中的例子一样,但你不必记住它。

有关详细信息,请参阅此问题: