【发布时间】:2015-11-27 10:27:43
【问题描述】:
我的场景
我曾经使用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传播过程中出现错误 - 它应该处理它, - 或者,如果没有错误 - 它应该做一些其他的事情
我是否接近我的预期?我怎么能最终实现它?
【问题讨论】:
-
返回
???.done()确实不返回一个承诺 -
@JaromandaX 是的,明白了!退货就够了。
done()仅用于终止链。干杯!
标签: javascript node.js promise q