检查一个函数是否为异步函数的方法。

323 阅读1分钟

前端开发中,有时候需要判断一个函数是否为异步函数,然后进行其他操作,比如click中按钮的loading动画相关。

那么在JS中的异步判断主要判断两种:async/await和promise。

async/await判断方法如下:

const func = async function(doit) {
    await doit
}
const isAsync = function(func) {
    return func.constructor.name === "AsyncFunction";
}
console.log(isAsync(func))

这种方式就是利用async函数中构造函数的name进行判断,相似方式还可以使用Object.prototype.toString.call(function).

针对promise的判断方法如下:

const func = function() {
    return new Promise((resolve, reject) => {
        console.log('runThis')
        resolve(true)
    })
}
const isPromise = function(func) {
    return func() instanceof Promise
}
console.log(isPromise(func))

或者另一种promise的判断方法如下:

const func = new Promise((resolve, reject) => {
        console.log('runThis')
        resolve(true)
    })
const isPromise = function(func) {
    return typeof func.then === 'function' && typeof func.catch === 'function'
}
console.log(isPromise(func))

但是上述两个方法无论哪种,都会打印出runThis,这也就是判断Promise的不足之处;

如果觉得有用的话,点个赞;如果有错或者其他更好方法的话,希望评论区不吝指正。