首页 > 解决方案 > 确定函数是否用“异步”定义

问题描述

我想知道是否有办法确定函数是使用async function还是async (...) => ...语法定义的?

我正在寻找实现以下功能的功能isDefinedWithAsync

isDefinedWithAsync(async function() { return null; }) === true;
isDefinedWithAsync(function() { return null; }) === false;
isDefinedWithAsync(async () => null) === true;
isDefinedWithAsync(() => null) === false;

是否可以实施isDefinedWithAsync?如果是这样,怎么办?谢谢!

标签: javascript

解决方案


是的,

直接来自TC39 async/await 问题

function isAsync(fn) {
   return fn.constructor.name === 'AsyncFunction';
}

这是一个检查您async上面的 2 个示例和第 3 个非异步函数的代码段:

function isAsync(fn) {
   return fn.constructor.name === 'AsyncFunction';
}

// async functions
const foo = async () => { }
async function bar () { } 

// non-async function
function baz () { } 

console.log(isAsync(foo)) // logs true
console.log(isAsync(bar)) // logs true
console.log(isAsync(baz)) // logs false

但正如关于该问题的其他评论所述,您不应该区分,至少在概念上,async functions 和Promises 因为它们的行为相同。

两者都可以以完全相同的方式进行await-ed/ -ed。标记then的函数总是隐式返回 a 。asyncPromise


推荐阅读