2016-04-14 11 views
1

Ich weiß nicht, was das genau ist der Unterschied zwischen AngularJS $q Service und einfach .then() nach Asynchron-Anfrage mit.

Einfaches Beispiel mit .then():

function InboxService($http) { 
    this.getEmails = function getEmails() { 
    return $http.get('/emails'); 
    }; 
} 

Und wenn die Nutzung des Dienstes (nur ein Teil des Codes):

InboxService.getEmails() 
.then(function (response) { 
    // use response 
}); 

Was ist der Unterschied mit $q Service mit Entschlossenheit und ablehnen?

Antwort

2

Was ist der Unterschied mit $ q Service mit Entschlossenheit und Ablehnung?

Ich nehme an, Sie über die Verwendung von var deferred = $q.defer() mit anschließenden deferred.resolve() oder deferred.reject() zu fragen? In diesem Fall lautet die Antwort, dass Sie sie nicht benötigen, da Sie bereits ein vom $http-Service zurückgegebenes Zusicherungsobjekt haben. In der Tat wird die manuelle Erstellung eines weiteren neuen Versprechens mit $q nicht empfohlen und als anti-pattern betrachtet.

In Fällen, in denen Sie mit asynchronen Funktionen (Timeouts, Ajax-Anforderungen) arbeiten, die nicht bereits in Versprechen eingeschlossen sind, ist dies der Fall, wenn Sie $q zum Erstellen und Zurückgeben von Versprechen verwenden möchten. Aber noch einmal, in Ihrem Fall brauchen Sie es nicht, da $http Service-Konstrukte für Sie versprechen und ein weiterer ist einfach überflüssig.

+0

Vielen Dank. Und noch eine Frage, was ist Ihr Vorschlag für mehrere asynchrone Anfragen, die ineinander übergehen sollten? –

+1

Es ist bequem, eine (die eine Verheißung ist) von einer anderen zurückzugeben, dann wird sich die äußere Verheißung mit der inneren auflösen. Wie wenn f1 und f2 Versprechen verspricht, könnte man 'f1() schreiben, dann (function (data1) {return f2 (data1)}), dann (function (data2) {console.log (data2)})' oder sogar 'f1() .dann (f2) .dann (function (data2) {console.log (data2)}) '. – dfsq

+0

Danke. In diesen Fällen kann ich einfach auf eines der Ergebnisse zugreifen. Wie kann ich die Anfragen verketten, aber auf das Ergebnis jeder Anfrage zugreifen? –