Refactoring: Rückgabe eines Versprechens von einem Wert oder einem bestehenden Versprechen
Ich hatte einigenode.js
Implementierung erfolgt mitcallbacks
aber ich überarbeite jetzt meinen Code, um @ zu verwendPromises
stattdessen - mitQ
Modul. Ich habe das folgendeupdate()
Funktion, bei der das innere_update()
-Funktion gibt bereits ein @ zurü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);
});
};
Meine FragIch möchte erreichensomething like the following:
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();
};
Weil_update()
gibt bereits ein @ zurüpromise
, Ich schätze, es auf diese Weise zu ändern wäre genug (wäre es nicht?):
return _update(id, template)
.done();
Und ... was ist, wenn dascondition
innerhalb desif-clause
ist gleichtrue
? Wie könnte ich @ refact
return callback(new Error('Invalid data', BaboonError.INVALID_DATA));
ein @ werferror
um zu vermeiden, dass das @ weitergegeben wicallback
inupdate()
und Behandlung dieses Fehlers (oder welcher Fehler auch immer jemals zurückkehren könnte_update()
)?
Auch anrufenupdate()
:
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 */});
anderswo in meinem Code:
wenn während des @ ein Fehler auftripromise
Propagation - es sollte damit umgehen,oder, wenn es keinen Fehler gab - sollte es ein paar andere Dinge tunBin ich nah dran, was ich erwarte? Wie könnte ich es endlich schaffen?