Рефакторинг: возврат обещания из стоимости или существующего обещания
Я имел обыкновение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();
};
Так как_update()
уже возвращаетpromise
Я думаю, что изменить его таким образом будет достаточно (не так ли?):
return _update(id, template)
.done();
И ... что еслиcondition
внутриif-clause
равняется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
распространение - оно должно справиться с этим,или, если не было ошибки - он должен делать другие вещиЯ близок к тому, что я ожидаю? Как я мог наконец достигнуть этого?