js判断函数是否为async
在 JavaScript 中,可以通过以下方法判断一个函数是否是 async 函数:
方法 1:使用 Object.prototype.toString
async 函数的类型标签是 "[object AsyncFunction]",可以利用这一点来判断。
function isAsyncFunction(func) {
return Object.prototype.toString.call(func) === '[object AsyncFunction]';
}
// 示例
async function myAsyncFunction() {}
function myNormalFunction() {}
console.log(isAsyncFunction(myAsyncFunction)); // true
console.log(isAsyncFunction(myNormalFunction)); // false
方法 2:检查函数的 constructor.name
async 函数的构造器名称是 "AsyncFunction",可以通过检查 constructor.name 来判断。
function isAsyncFunction(func) {
return func && func.constructor && func.constructor.name === 'AsyncFunction';
}
// 示例
async function myAsyncFunction() {}
function myNormalFunction() {}
console.log(isAsyncFunction(myAsyncFunction)); // true
console.log(isAsyncFunction(myNormalFunction)); // false
方法 3:直接与 AsyncFunction 构造器比较
JavaScript 提供了一个内置的 AsyncFunction 构造器,可以直接用来判断。
function isAsyncFunction(func) {
return func instanceof AsyncFunction;
}
// 示例
async function myAsyncFunction() {}
function myNormalFunction() {}
console.log(isAsyncFunction(myAsyncFunction)); // true
console.log(isAsyncFunction(myNormalFunction)); // false
注意事项
-
AsyncFunction并未直接暴露在全局作用域
虽然AsyncFunction是 JavaScript 内置的构造器,但它并未直接挂载到全局对象(如window或global)上。如果你尝试直接访问AsyncFunction,可能会报错。因此,推荐使用前两种方法。 -
箭头函数的特殊情况
如果你用箭头函数定义async函数,这些方法同样适用。const asyncArrow = async () => {}; console.log(isAsyncFunction(asyncArrow)); // true -
普通函数和异步函数的区别
普通函数不会返回Promise,而async函数始终返回一个Promise对象。但这种方法不能作为判断依据,因为普通函数也可能返回Promise。
以上三种方法都可以有效判断一个函数是否为 async 函数,选择其中一种适合你的场景即可!

浙公网安备 33010602011771号