如何在 JavaScript 中检查函数是否异步
要检查函数是否异步,请访问函数的 constructor.name
属性并检查该值是否等于 AsyncFunction
,例如 myFunction.constructor.name === 'AsyncFunction'
。 如果相等性检查返回 true,则该函数是异步的。
const sum = async (a, b) => {
return a + b;
};
if (sum.constructor.name === 'AsyncFunction') {
// 👇️ this runs
console.log('✅ function is async');
} else {
console.log('⛔️ function is NOT async');
}
访问函数时,constructor
属性返回:
- 非异步函数的函数构造函数
-
异步函数的
AsyncFunction
构造函数
JavaScript 中的每个异步函数都是一个 AsyncFunction
对象。
最后一步是访问构造函数的名称属性,并检查是否使用 AsyncFunction 构造函数来创建函数。
如果条件通过,那么我们就有了一个异步函数。
这种方法适用于箭头和命名函数。
如果我们访问非异步函数的 name 属性,则会返回字符串“Function”。
function example() {}
console.log(example.constructor.name); // 👉️ "Function"
不同的构造函数用于创建异步和非异步函数,因此我们可以很容易地判断一个函数是否是异步的。
请记住
,非异步函数可能会返回一个 promise。
// 👇️ non-async returns Promise
function example() {
return new Promise(resolve => {
resolve(100);
});
}
console.log(example()); // 👉️ Promise {}
console.log(example.constructor.name); // 👉️ "Function"
该示例显示了一个返回承诺的非异步函数。
了解非异步函数是否返回承诺的唯一方法是调用该函数。
我们可以通过以下方式检查函数的返回值是否为 Promise。
function example() {
return new Promise(resolve => {
resolve(100);
});
}
function isPromise(p) {
if (typeof p === 'object' && typeof p.then === 'function') {
return true;
}
return false;
}
console.log(isPromise(example())); // 👉️ true
console.log(isPromise(() => {})); // 👉️ false
我们检查传入的值是否是一个对象,并且它包含一个名为 then
的属性,该属性属于函数类型。
这种方法会失败,因为有人传递了一个对象,该对象的
then
类型函数的属性实际上不是一个承诺。
大多数时候你不能仅仅调用函数来检查它们的返回值是什么,因为它们可能正在改变状态,例如 在数据库中。
但是,如果我们可以在不改变任何状态的情况下调用该函数,则可以组合这两个条件。
if (
example.constructor.name === 'AsyncFunction' ||
(typeof example === 'function' && isPromise(example()))
) {
console.log('✅ Function returns promise');
} else {
console.log('⛔️ Function does NOT return promise');
}
我们的 if
语句检查函数是异步的还是返回一个 promise。 如果任一检查通过,则 if
块运行。
相关文章
使用 CSS 和 JavaScript 制作文本闪烁
发布时间:2023/04/28 浏览次数:146 分类:CSS
-
本文提供了使用 CSS、JavaScript 和 jQuery 使文本闪烁的详细说明。
在 PHP 变量中存储 Div Id 并将其传递给 JavaScript
发布时间:2023/03/29 浏览次数:69 分类:PHP
-
本文教导将 div id 存储在 PHP 变量中并将其传递给 JavaScript 代码。
在 JavaScript 中从字符串中获取第一个字符
发布时间:2023/03/24 浏览次数:93 分类:JavaScript
-
在本文中,我们将看到如何使用 JavaScript 中的内置方法获取字符串的第一个字符。
在 JavaScript 中获取字符串的最后一个字符
发布时间:2023/03/24 浏览次数:141 分类:JavaScript
-
本教程展示了在 javascript 中获取字符串最后一个字符的方法