要测试对象是否为Promise,只需检查对象是否具有then()
属性
但是如果没有执行该函数,那么该对象尚未生成。有没有办法测试?或假冒执行?如何处理执行中可能出现的错误?
我正在尝试编写一个辅助函数来在Redux中创建操作。我想使用相同的接口进行同步和异步操作。
function createAction('SOMEACTION', (arg) => dosth(arg);
function createAction('FETCHACTION', (arg) =>fetch(arg);
我将通过检查fetch()
是否返回一个promise来检测异步操作。
答案 0 :(得分:3)
如何判断函数是否返回Promise
impossible in general没有执行它或使用静态类型系统。
我想使用相同的界面进行同步和异步操作。
解决方案不是检测函数是否会在调用时返回promise,而只是始终将其视为异步。您可以使用Promise.resolve
来投射最终的非承诺值:
function createAction(name, action) {
…
Promise.resolve(action()).then(result => …);
}
答案 1 :(得分:2)
承诺是对价值的代理,而不是对流程的代理。如果您愿意,可以使用“IOU”作为运行操作产生的值。
因此,根据定义,如果没有先运行会产生最终值的操作,就无法获得要测试的Promise。