javascript-重构:从值或现有的承诺中返回承诺
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-重构:从值或现有的承诺中返回承诺,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![javascript-重构:从值或现有的承诺中返回承诺](/upload/InfoBanner/zyjiaocheng/694/ef48e8490411462ebf79d8268130c613.jpg)
我的情况
我曾经使用回调完成一些node.js的实现,但是现在我将代码重构为使用Promises -使用Q模块.我有以下update()函数,其中内部_update()函数已返回Promise:
exports.update = function(id, template, callback) {
if (!_isValid(template)){
return callback(new Error('Invalid data', Error.INVALID_DATA));
}
_update(id, template) // this already returns a promise
.then(function() {
console.log('UPDATE was OK!');
callback();
}, function(err) {
console.log('UPDATE with ERRORs!');
callback(err);
});
};
我的问题
我想实现以下目标:
exports.update = function(id, template) {
if (!_isValid(template)){
// how could I make it return a valid Promise Error?
return reject(new Error('Invalid data', Error.INVALID_DATA));
}
return _update(id, template) // return the promise
.done();
};
因为_update()已经返回了一个promise,所以我猜以这种方式进行更改就足够了(不是吗?):
return _update(id, template)
.done();
而且…如果if子句中的条件等于真该怎么办?我该如何重构
返回回调(新错误(‘无效数据’,BaboonError.INVALID_DATA));
抛出一个错误以避免将回调传递到update()并处理该错误(或者曾经发生过什么错误可能返回_update())?
另外,调用update():
myModule.update(someId, someTemplate)
.then(function() { /* if the promise returned ok, let's do something */ })
.catch(function(err) { /* wish to handle errors here if there was any */});
我代码中的其他地方:
>如果在承诺传播期间出现错误-应该处理该错误,
>或者,如果没有错误-它应该做一些其他事情
我是否接近预期?我最终将如何实现?
解决方法:
我只看到两个问题.
>如果要显式返回带有值的已拒绝承诺,则应使用Q.reject.
>对promise调用.done()表示promise在那里结束.它无法进一步链接.
因此,您的代码将如下所示
exports.update = function (id, template) {
if (!_isValid(template)) {
return Q.reject(new Error('Invalid data', Error.INVALID_DATA));
}
return _update(id, template);
};
现在,更新功能始终总是返回一个承诺.由调用者决定是否将成功或失败处理程序附加到它.
内容总结
以上是互联网集市为您收集整理的javascript-重构:从值或现有的承诺中返回承诺全部内容,希望文章能够帮你解决javascript-重构:从值或现有的承诺中返回承诺所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。