我的场景
我曾经有一些node.js
实施完成使用callbacks
但我现在正在重构我的代码以使用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();
};
Because _update()
已经返回一个promise
,我想这样改变它就足够了(不是吗?):
return _update(id, template)
.done();
而且...如果condition
在 - 的里面if-clause
equals true
?我该如何重构
return callback(new Error('Invalid data', BaboonError.INVALID_DATA));
扔一个error
以避免通过callback
into 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
传播 - 它应该处理它,
- 或者,如果没有错误 - 它应该做一些其他事情
我接近我的期望吗?我最终怎样才能实现呢?