[英]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.