javascript - 确定函数是否用“异步”定义
问题描述
我想知道是否有办法确定函数是使用async function
还是async (...) => ...
语法定义的?
我正在寻找实现以下功能的功能isDefinedWithAsync
:
isDefinedWithAsync(async function() { return null; }) === true;
isDefinedWithAsync(function() { return null; }) === false;
isDefinedWithAsync(async () => null) === true;
isDefinedWithAsync(() => null) === false;
是否可以实施isDefinedWithAsync
?如果是这样,怎么办?谢谢!
解决方案
是的,
直接来自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 function
s 和Promise
s 因为它们的行为相同。
两者都可以以完全相同的方式进行await
-ed/ -ed。标记then
的函数总是隐式返回 a 。async
Promise
推荐阅读
- c++ - 我的代码是正确的,但没有被 Leetcode 平台接受。(之字形转换)
- error-handling - Ansible:忽略包含任务中的错误
- python - 将非常长且复杂的版本号与python中的正则表达式匹配
- kubernetes - ceph 15.2.4 -- 身份验证更改 -- 无法与 kubernetes 重新连接
- ruby - 如何在 Ubuntu 18.04 中安装 ruby 2.7.2 (Dockerfile)?
- javascript - 字符串中每 4 个连续数字后换行
- html - 如何填补bootstrap横卡的空白
- .net-core-3.0 - C# 8.0 和 .net 3.0
- apache-spark - Spark dataframe 多维数据集操作给出重复的行
- python - python smypy/matplotlib 输入输出与符号方程