题目
function isAsyncFunction(func) {
}
isAsyncFunction(() => {
}) // expect: false
isAsyncFunction(async() => {
}) // expect: true
错误方法
1、调用函数,看返回的是不是一个promise
function isAsyncFunction(func) {
func() // 看返回的是不是一个promise
}
- 首先并不知道这个函数需要传递多少个参数,参数怎么传也不知道
- 可能没有标记async,但是返回的是一个promise
function f() {
return new Promise()
}
- 函数里面有副作用,更改了一些东西,或者发送了一个请求,造成副作用不可取
正确方法
先观察普通函数和async函数的区别
async函数在原型上有个符号,而且是知名符号,值是AsyncFunction
所以只要判断这个函数带不带这个知名符号
function isAsyncFunction(func) {
return func[Symbol.toStringTag] === 'AsyncFunction'
}