¿Cómo salir correctamente de una cadena de promesa?

Basado en la pregunta aquí:jQuery encadenando y conectando en cascada entonces y cuándo y la respuesta aceptada.

Quiero romper la cadena de la promesa en un punto, pero aún no he encontrado la forma correcta. Existenmúltiple publicaciones acerca de esto, pero todavía estoy perdido.

Tomando el código de ejemplo de la pregunta original:

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
});

¿Cómo rompería la cadena sicantinas.length == 0? No me gustaría obtener las comidas, ni los aditivos, francamente me gustaría llamar a algún tipo de devolución de llamada de "resultado vacío". He intentado lo siguiente que esmuy feo (pero funciona ...) Enséñame el camino correcto. Este sigue siendo un resultado válido, por lo que no es un "error" per se, solo un resultado vacío, diría.

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
});

Respuestas a la pregunta(3)

Su respuesta a la pregunta