判断函数是否标记async

编程入门 行业动态 更新时间:2024-10-24 04:51:46

判断<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数是否标记async"/>

判断函数是否标记async

判断函数是否标记为async

今天看到这道题觉得蛮有意思的
就是说让你写一个工具类,让后这个工具类接收一个函数,判断这个函数是不是被async标记了

如下,我们先看看普通函数和被async标记的函数打印出来是啥样子

	function isAsyncFunction(func) {console.log(func)}isAsyncFunction(() => { })isAsyncFunction(async () => { })

额写顺手了,我们还是用dir看看对象结构吧

可以看到普通函数的原型是function,这是大家都知道的,每一个函数,他的原型是function function的原型是object,
但是标记了async的函数,它的原型变了,变成了AsyncFunction

我们继续展开,AsyncFunction,可以看到,在AsyncFunction的原型才是function
也就是说,被标记了async的函数他的原型链与普通的原型链相比,它中间加了一层AsyncFunction

知道了这个,那也就简单了,我们可以直接判断一下函数的原型链,是function的那就是,没被标记的普通函数,原型链是AsyncFunction的那就是被async标记了的函数,

说干就干

	function isAsyncFunction(func) {console.log(func.constructor === AsyncFunction)console.dir(func)}isAsyncFunction(() => { })isAsyncFunction(async () => { })


好嘛,直接告诉我AsyncFunction未定义,我们不能直接使用

那我们只能直接再一次来看它的对象结构了

可以看到被async标记的函数的原型上包含了一个Symbol.toStringTag的符号属性,而普通函数是没有这个符号属性的
也就是说我们可以尝试打印一下它的原型上的toString方法试试

	function isAsyncFunction(func) {console.dir(Object.prototype.toString.call(func))}isAsyncFunction(() => { })isAsyncFunction(async () => { })

如下,可以看到,普通函数打印的是[object Function],而被async标记了的函数打印的是[object AsyncFunction]
也就是说,可以通过这个东西来判断


我这里直接调用它这个符号属性了,就不绕圈子了,

	function isAsyncFunction(func) {console.log(func[Symbol.toStringTag] === 'AsyncFunction')}isAsyncFunction(() => { })isAsyncFunction(async () => { })

成功,圆满解决

更多推荐

判断函数是否标记async

本文发布于:2023-12-03 20:37:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657383.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   标记   async

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!