【字节面试题】判断传入的函数是否标记了async

在这里插入图片描述

题目

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'
}

猜你喜欢

转载自blog.csdn.net/weixin_44582045/article/details/129882804
今日推荐