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

AsyncFunction is not defined, yet MDN documents it's usage

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

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

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

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

如 Mozilla 文档中所述"Note that AsyncFunction is not a global object."

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

来自文档:

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

文档本身很混乱,所以难怪人们也会感到困惑。

MDN 文档告诉我们 AsyncFunction 不是全局对象,但他们在 全局对象 参考中列出了它!糟糕!

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

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

但事实并非如此:

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

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

它基本上像 Patrick 的回答中的示例一样工作,但您不必记住它。

另请参阅此问题以获取更多信息:

  • How to know if a function is async?