Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定函数是否用“定义”;异步;_Javascript - Fatal编程技术网

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实现
定义?如果是,怎么做?谢谢

是的

直截了当地说:

下面是一个片段,用于检查上面的2
async
示例和第三个非异步函数:

函数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;
}