有一篇文章AsyncFunction - JavaScript on MDN。它显示以下代码段:
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
然而,在Mozzila Firefox 55和Google Chrome中,根本没有定义此构造函数:
我发现(async function() {}).constructor
确实是AsyncFunction
,但为什么我无法在全球范围内看到它?
答案 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
模块:
它基本上像帕特里克的答案中的例子一样,但你不必记住它。
有关详细信息,请参阅此问题: