Javascript 确定函数是否用“定义”;异步;
我想知道是否有办法确定函数是使用Javascript 确定函数是否用“定义”;异步;,javascript,Javascript,我想知道是否有办法确定函数是使用async function还是async(…)=>…语法定义的 我希望实现函数是用async定义的,其中: isDefinedWithAsync(async function() { return null; }) === true; isDefinedWithAsync(function() { return null; }) === false; isDefinedWithAsync(async () => null) === true; isDefi
async function
还是async(…)=>…
语法定义的
我希望实现函数是用async定义的,其中:
isDefinedWithAsync(async function() { return null; }) === true;
isDefinedWithAsync(function() { return null; }) === false;
isDefinedWithAsync(async () => null) === true;
isDefinedWithAsync(() => null) === false;
是否可以使用Async实现定义?如果是,怎么做?谢谢 是的
直截了当地说:
下面是一个片段,用于检查上面的2async
示例和第三个非异步函数:
函数isAsync(fn){
返回fn.constructor.name=='AsyncFunction';
}
//异步函数
const foo=async()=>{}
异步函数栏(){}
//非异步函数
函数baz(){}
console.log(isAsync(foo))//日志为true
console.log(isAsync(bar))//日志为true
console.log(isAsync(baz))//logs false
只是对Nicholas伟大答案的补充:
如果要避免使用字符串比较进行类型检查(由于可能存在命名空间冲突),则可能需要使用instanceof完成相同的操作:
function isAsync(fn) {
return fn instanceof AsyncFunction;
}
在某些环境中,您可能会遇到“未定义异步函数”的ReferenceError
此错误可通过以下方式解决:
const AsyncFunction = (async () => {}).constructor;
function isAsync(fn) {
return fn instanceof AsyncFunction;
}
现在,即使由于某种愚蠢的巧合,出现了一个名为“AsyncFunction”的用户定义类,您也不会得到误报,因为该方法不依赖于字符串比较
const AsyncFunction = (async () => {}).constructor;
function isAsync(fn) {
return fn instanceof AsyncFunction;
}