如何检查JavaScript函数是否返回Promise?

tra*_*tam 3 javascript function promise

说我有两个功能:

function f1() {
    return new Promise<any>((resolve, reject) => {
        resolve(true);
    });
}

function f2() {
}
Run Code Online (Sandbox Code Playgroud)

我怎么知道是否f1会返回Promisef2不会呢?

gue*_*314 13

调用该函数,使用 instanceof

let possiblePromise = f1();
let isPromise = possiblePromise instanceof Promise;
Run Code Online (Sandbox Code Playgroud)

  • [ps:我不想调用它,只是为了检查是否可以保证返回任何功能](http://stackoverflow.com/questions/43416214/how-to-check-if-a-function-return- a-promise-on-javascript#comment73891478_43416214) (3认同)
  • 是的,或者只是解释他们正在做什么[试图](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),而不是让所有人感到困惑 (3认同)

Tho*_*mas 8

所以这只是关于规范化输出.然后运行它Promise.resolve()和co.

var possiblePromise = f1();
var certainPromise = Promise.resolve(possiblePromise).then(...);
Run Code Online (Sandbox Code Playgroud)

要么

var possiblePromises = [f1(), f2()];
Promise.all(possiblePromises).then(values => ...);
Run Code Online (Sandbox Code Playgroud)

但是你需要对这些函数返回的基本概念有所了解.例如:两个例子都会失败

function f3(){
    return [somePromise, someOtherPromise];
}

var arrayOfPromisesOrValues = f3();

//here you'll still deal with an Array of Promises in then();
Promise.resolve(arrayOfPromisesOrValues).then(console.log); 
//neither does this one recognize the nested Promises
Promise.all([ f1(), f2(), f3() ]).then(console.log);

//only these will do:
Promise.all(f3()).then(console.log);
Promise.all([ f1(), f2(), Promise.all(f3()) ]).then(console.log);
Run Code Online (Sandbox Code Playgroud)

您需要知道f3返回一个Promises或值数组并处理它.就像你需要知道f1f2返回一个值或一个值的Promise.

结论:您需要具备函数返回的基本知识,以便能够通过正确的函数运行结果来解析promise.