JavaScript 中检查函数是否返回 Promise

要检查函数是否返回Promise,请检查函数是否异步或调用它并检查函数是否返回具有函数类型 then 属性的对象。 如果满足任一条件,该函数将返回一个 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 语句中的第一个条件检查函数是否是异步的。

我们的第二个条件检查传入的值是否是一个函数并调用它,将结果传递给 isPromise() 函数。

有两种方法可以检查一个函数是否返回一个 promise:

  1. 检查函数是否异步——然后它会 100% 地返回一个 promise
  2. 检查函数的返回值是否是具有函数类型 then 属性的对象。