承诺包装模式

时间:2016-03-04 03:10:16

标签: javascript promise

我目前有以下承诺包装功能:

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))
                })
        });
    }

虽然这有效,但我觉得它不是实现预期结果的最有效方式,甚至可能背叛了对承诺如何运作的基本缺乏理解。所以这是相当通用的,但你会如何重构这段代码呢?是否有更好的方法来实现相同的结果?

1 个答案:

答案 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}}调用的返回值 - 对回调结果的另一个承诺 - 是承诺的全部内容。