如何在不执行函数的情况下判断函数是否返回Promise?

时间:2016-08-28 08:40:55

标签: javascript promise

要测试对象是否为Promise,只需检查对象是否具有then()属性

但是如果没有执行该函数,那么该对象尚未生成。有没有办法测试?或假冒执行?如何处理执行中可能出现的错误?

我正在尝试编写一个辅助函数来在Redux中创建操作。我想使用相同的接口进行同步和异步操作。

function createAction('SOMEACTION', (arg) => dosth(arg);
function createAction('FETCHACTION', (arg) =>fetch(arg);

我将通过检查fetch()是否返回一个promise来检测异步操作。

2 个答案:

答案 0 :(得分:3)

  

如何判断函数是否返回Promise

impossible in general没有执行它或使用静态类型系统。

  

我想使用相同的界面进行同步和异步操作。

解决方案不是检测函数是否会在调用时返回promise,而只是始终将其视为异步。您可以使用Promise.resolve来投射最终的非承诺值:

function createAction(name, action) {
    …
    Promise.resolve(action()).then(result => …);
}

答案 1 :(得分:2)

承诺是对价值的代理,而不是对流程的代理。如果您愿意,可以使用“IOU”作为运行操作产生的值。

因此,根据定义,如果没有先运行会产生最终值的操作,就无法获得要测试的Promise。