[英]Refactoring: returning a promise from a value or an existing promise
我曾经使用callbacks
完成一些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-clause
的condition
等于true
怎么办? 我该如何重构
return callback(new Error('Invalid data', BaboonError.INVALID_DATA));
抛出一个error
以避免将callback
到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 */});
我代码中的其他地方:
promise
传播期间出现错误-应该处理该错误, 我是否接近预期? 我最终将如何实现?
我只看到两个问题。
因此,您的代码将如下所示
exports.update = function (id, template) {
if (!_isValid(template)) {
return Q.reject(new Error('Invalid data', Error.INVALID_DATA));
}
return _update(id, template);
};
现在, update
功能始终总是返回一个承诺。 由调用者决定是否将成功或失败处理程序附加到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.