JavaScript 中检查函数是否返回的 Promise
要检查函数是否返回 Promise,请检查函数是否异步或调用它并检查函数是否返回具有函数类型 属性的对象。 如果满足任一条件,该函数将返回一个 Promise。
// ✅ Promise check
function isPromise(p) {
if (typeof p === 'object' && typeof p.then === 'function') {
return true;
}
return false;
}
// ✅ Check if return value is promise
function returnsPromise(f) {
if (
f.constructor.name === 'AsyncFunction' ||
(typeof f === 'function' && isPromise(f()))
) {
console.log('✅ Function returns promise');
return true;
}
console.log('⛔️ Function does NOT return promise');
return false;
}
// 👇️ Examples
async function exampleAsync() {}
function example() {}
function examplePromise() {
return new Promise(resolve => {
resolve(42);
});
}
console.log(returnsPromise(exampleAsync)); // 👉️ true
console.log(returnsPromise(example)); // 👉️ false
console.log(returnsPromise(examplePromise)); // 👉️ true
代码片段中的第一个函数检查传入的值是否为 Promise。
第二个函数将另一个函数作为参数并检查它的返回值是否是一个 promise。
if 语句中的第一个条件检查函数是否是异步的。
每个异步函数都会返回一个 promise,因此如果该函数是异步的,我们会立即断定它会返回一个 promise。
我们的第二个条件检查传入的值是否是一个函数并调用它,将结果传递给 isPromise() 函数。
检查非异步函数是否返回承诺的唯一方法是调用它。 ,如果它改变状态,调用函数可能不安全,例如 写入数据库。
有两种方法可以检查一个函数是否返回一个 promise:
- 检查函数是否异步——然后它会 地返回一个 promise
- 检查函数的返回值是否是具有函数类型 属性的对象。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。