Как правильно вырваться из цепочки обещаний?

Исходя из вопроса здесь:JQuery цепочки и каскадные тогда и когда и принятый ответ.

Я хочу разорвать цепочку обещаний, но пока не нашел правильного пути. Естьмножественный сообщений около это, но я все еще потерялся.

Взяв пример кода из исходного вопроса:

Menus.getCantinas().then(function(cantinas){ // `then` is how we chain promises
    Menus.cantinas = cantinas;
    // if we need to aggregate more than one promise, we `$.when`
    return $.when(Menus.getMeals(cantinas), Menus.getSides(cantinas));
}).then(function(meals, sides){ // in jQuery `then` can take multiple arguments
    Menus.sides = sides; // we can fill closure arguments here
    Menus.meals = meals;
    return Menus.getAdditives(meals, sides); // again we chain
}).then(function(additives){
    Menus.additives = additives;
    return Menus; // we can also return non promises and chain on them if we want
}).done(function(){ // done terminates a chain generally.
     // edit HTML here
});

Как бы я разорвать цепь, еслиcantinas.length == 0? Я не хотел бы получать ни еду, ни добавки, честно говоря, я хотел бы назвать какой-то «пустой результат» обратным вызовом. Я пробовал следующее, котороеочень некрасиво (но работает ...). Научи меня правильному пути. Это все еще действительный результат, так что, по сути, это не «сбой», а пустой результат, я бы сказал.

var emptyResult = false;
Menus.getCantinas().then(function(cantinas){
    Menus.cantinas = cantinas;
    if (cantinas.length == 0) {
      emptyResult = true;
      return "emptyResult"; //unuglify me
    }
    return $.when(Menus.getMeals(cantinas), Menus.getSides(cantinas));
}).then(function(meals, sides){ 
    if (meals == "emptyResult") return meals;  //look at my ugliness...
    Menus.sides = sides;
    Menus.meals = meals;
    return Menus.getAdditives(meals, sides);
}).then(function(additives){
    if (additives == "emptyResult") return additives;
    Menus.additives = additives;
    return Menus;
}).done(function(){
   if (emptyResult)
     //do empty result stuff
   else
     // normal stuff
});

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

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