承诺包装模式

Promise Wrapping Pattern

本文关键字:模式 包装 承诺      更新时间:2023-09-26

我目前有以下承诺包装函数:

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()调用的返回值 - 回调结果的另一个承诺 - 就是承诺的全部内容。