首页 > 解决方案 > 检查变量是否为“异步函数”类型

问题描述

给定一个变量,定义如下:

const f = async function() {/* ... */};

如何检查变量f是否属于类型async function

我已经找到了这个解决方案:

f.constructor.name === "AsyncFunction";

但“f.constructor.name”与 IE11 不兼容。还有其他想法吗?

我知道异步函数在 IE11 中不起作用,......但它们通过 babel 编译过程工作。这个想法是找到一种方法来检测像 node.js 这样与 IE11/babel 兼容的环境中的异步函数

标签: javascriptasynchronousasync-await

解决方案


这似乎是个坏主意。有很多函数实际上是异步的(返回一个 Promise),但没有被标记为这样(也许它们被编译为浏览器支持)。

如果你真的想测试一个函数是否是异步的,最好测试一下返回值是否有一个.then属性:

const maybeTask = f()
if ('then' in maybeTask) {
  maybeTask.then( .... )
}

推荐阅读