我目前有以下承诺包装功能:
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))
})
});
}
虽然这有效,但我觉得它不是实现预期结果的最有效方式,甚至可能背叛了对承诺如何运作的基本缺乏理解。所以这是相当通用的,但你会如何重构这段代码呢?是否有更好的方法来实现相同的结果?
答案 0 :(得分:1)
我不确定你是不是偶然实现了Promise
constructor antipattern,现在正试图概括它,或者真正认识到usefulness of functors/monads(恭喜!),但你已经彻底改造了function promiseWrap(promiseInstance, resolveFunc, rejectFunc) {
// assuming promiseInstance instanceof Promise - if not, add a `Promise.resolve()`
return promiseInstance.then(resolveFunc, rejectFunc);
}
方法。
您的代码more or less exactly等同于
then()
实际上,{{1}}调用的返回值 - 对回调结果的另一个承诺 - 是承诺的全部内容。