Refactoring: Rückgabe eines Versprechens von einem Wert oder einem bestehenden Versprechen

Mein Szenario

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 Frag

Ich 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 wicallbackinupdate() 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 tun

Bin ich nah dran, was ich erwarte? Wie könnte ich es endlich schaffen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage