2016-08-02 4 views
2

Ich habe folgende JavaScript-Funktion:Wie vereinfachen dies mit dem Versprechen

function render(id) { 

      var deferred = $q.defer(); 

      Flights.get(id).then(function(flightDto){ 

       Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) { 

       self.arivalId = arrivalDto.id; 
       deferred.resolve(self); 

       }); 

      }); 

      return deferred.promise; 

} 

Gibt es eine Möglichkeit, besser vereinfachen kann Versprechen mit, so dass das Versprechen löst erst nach der Ankunft Anruf getätigt wird? Ich verwende eckige und die eingebaute $ q Bibliothek.

Antwort

4
function render(id) { 
    return Flights.get(id).then(function(flightDto) { 
     return Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) { 
      self.arivalId = arrivalDto.id; 
      return self; 
     }); 
    }); 
} 

Alles, was Sie return in einem then wird als Entschlossenheit dieses Versprechen behandelt werden.
Wenn Sie keine Zusage zurückgeben, wird in diesem Fall darauf gewartet, und das Ergebnis wird als die Lösung dieser Zusage behandelt.

Dies bedeutet, dass Sie die dann so tief verschachteln können, wie Sie brauchen und einfach immer wieder von den verschachtelten Funktionen zurückkehren.

1

Das tolle an Versprechen ist, dass sie verkettet statt verschachtelt sein können. Dies macht den Code viel übersichtlicher und einfacher zu begründen (worüber zum Beispiel zuerst kommt). Nachfolgend ist der Code aus Buh Buhs Antwort, verbessert um das zweite Versprechen zu verketten anstatt zu verschachteln:

+0

Ja, das ist wahrscheinlich besser. Aus irgendeinem Grund bin ich wohler beim Nisten, aber ich denke, die meisten Leute würden eine Verkettung empfehlen. –

Verwandte Themen