判断传入的函数是否标记了 async
小于 1 分钟
题目
写一个函数来判断传入的函数是否标记了 async
示例
function isAsyncFunction(func) {}
isAsyncFunction(() => {}); // expect: false
isAsyncFunction(async () => {}); // expect: true
解决方法
在 async 标记的函数原型上有一个 Symbol.toStringTag
属性
console.dir(async function () {});
/*
expect:
...
[[Prototype]]: AsyncFunction
constructor: f AsyncFunction()
Symbol(Symbol.toStringTag): "AsyncFunction"
...
*/
通过判断 Symbol.toStringTag
属性即可知道传入函数是否为 async 标记的函数
function isAsyncFunction(func) {
return func[Symbol.toStringTag] === "AsyncFunction";
}