Рефакторинг: возврат обещания из стоимости или существующего обещания

Мой сценарий

Я имел обыкновение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 распространение - оно должно справиться с этим,или, если не было ошибки - он должен делать другие вещи

Я близок к тому, что я ожидаю? Как я мог наконец достигнуть этого?

Ответы на вопрос(1)

Ваш ответ на вопрос