确定函数是否用“async”定义

Ger*_*ica 3 javascript

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

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

isDefinedWithAsync(async function() { return null; }) === true;
isDefinedWithAsync(function() { return null; }) === false;
isDefinedWithAsync(async () => null) === true;
isDefinedWithAsync(() => null) === false;
Run Code Online (Sandbox Code Playgroud)

是否可以实施isDefinedWithAsync?如果是这样,如何?谢谢!

Nik*_*des 7

是的,

直接来自TC39 async/await 问题

function isAsync(fn) {
   return fn.constructor.name === 'AsyncFunction';
}
Run Code Online (Sandbox Code Playgroud)

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

function isAsync(fn) {
   return fn.constructor.name === 'AsyncFunction';
}
Run Code Online (Sandbox Code Playgroud)

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

两者都可以以完全相同的方式await-ed/ then-ed。一个async标记功能总是含蓄地返回Promise