承诺包装模式
Promise Wrapping Pattern
我目前有以下承诺包装函数:
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()
调用的返回值 - 回调结果的另一个承诺 - 就是承诺的全部内容。
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何将函数包装在函数中以避免代码重复
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- D3.js模式不适用于弧形或圆环图
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- 如何从定制的ACE编辑器模式强制软包装
- 在 Node.js 应用程序中包装记录器的设计模式
- 承诺包装模式
- 设计模式下的浏览器将孤立的 LI 元素包装在 UL - Firefox 和 Chrome 中
- 为什么这种包装javascript的模式
- 检测字符串中的“模式”并将其包装在javascript(angular)中标签
- 将承诺包装在承诺中是一种反模式
- 使用Regex和JavaScript在字符串中包装出现多次的单个模式
- 用于包装异步JavaScript函数以使其同步的模式