前端开发中,有时候需要判断一个函数是否为异步函数,然后进行其他操作,比如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的不足之处;
如果觉得有用的话,点个赞;如果有错或者其他更好方法的话,希望评论区不吝指正。