判断传入的函数是否标记了 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";
}