我目前有以下承诺包装函数:
var promiseWrap = (promiseInstance, resolveFunc, rejectFunc) => {
return new Promise((resolvePath, rejectPath) => {
promiseInstance
.then((...args) => {
resolvePath(resolveFunc.apply(null, args))
})
.catch((...args) => {
rejectPath(rejectFunc.apply(null, args))
})
});
}
虽然这行得通,但我感觉这不是实现预期结果的最有效方法,甚至可能暴露出对承诺如何运作的根本缺乏理解。所以这是相当通用的,但是您将如何重构此代码?有没有更好的方法来达到相同的结果?
我不确定您是偶然实现了Promise
构造函数反模式,现在正在尝试推广它,还是真正认识到函子/monads 的有用性(恭喜!),但您已经重新发明了.then
方法。
您的代码或多或少完全等同于
function promiseWrap(promiseInstance, resolveFunc, rejectFunc) {
// assuming promiseInstance instanceof Promise - if not, add a `Promise.resolve()`
return promiseInstance.then(resolveFunc, rejectFunc);
}
事实上,then()
调用的返回值 - 回调结果的另一个承诺 - 就是承诺的全部内容。