Ich verwende Restangular, um mehrere gleichzeitige Anrufe an den Server zu tätigen. Restanguläre Renditen versprechen für jede Aktion, jeder von ihnen muss etwas mit seiner spezifischen Rückkehr tun, und sobald alle 3 abgeschlossen sind und ihre .then
Funktionen abgeschlossen sind, muss ich eine andere Funktion ausführen.Warten auf mehrere Versprechen als Gruppe und einzeln in eckigen?
Ist dies der richtige Weg, Versprechen in diesem Fall zu machen?
var a, b, c;
a = service1.getList(...).then(function A(data) { do something; $log.debug('a'); return 'a';});
b = service2.getList(...).then(function B(data) { do something; $log.debug('b'); return 'b';});
c = service3.getList(...).then(function C(data) { do something; $log.debug('c'); return 'c';});
$q.all([a,b,c]).then(function wrapUp(values) { $log.debug(values); do something after functions A, B,and C above have finished;}
Ich weiß nicht, ob $ q.all() am Ende von A, B und C durchgeführt wird, oder wenn es vor der letzten Funktion laufen kann. Wird wrapUp() IMMER zuletzt aufgerufen?
Beachten Sie, dass A, B und C die Funktionen sind, die nach den Versprechungen a, b und c aufgerufen werden. Das Werte-Array, das an wrapUp übergeben wurde, scheint die Rückgabewerte von A, B und C zu sein. In meiner Konsole werden jedoch 10 Mal Funktionen A protokolliert, und dann 10 Mal Funktion B, dann Funktion C und Funktion wrapUp protokollieren beide 10 Mal (abwechselnd).
Die 10x Protokollierung scheint wie etwas gebrochen ist ....., und die gefürchtete Race-Bedingung scheint eine Möglichkeit zu sein ....
Kann jemand erklären, was hier vor sich geht?
Ich habe dein Szenario getestet und es funktioniert sehr gut, es sollte eine andere Situation geben, wie löst man diese aus, vielleicht sollten wir das untersuchen? Hier ist Ihr Szenario in der Restangular-Vorlage http://plnkr.co/edit/Wp0FEVz8iwOyXf84pZ8h?p=preview –
ng-Grid scheint der Übeltäter zu sein, Irgendwie obwohl dieser Handler 10 Mal aufgerufen wird, sendet restangular nur 3 Anfragen an den Webserver (wie erwartet) Die 10 Antworten für jeden der Versuche. Kombiniert der Restangular Requests, die identisch sind, und fügt sie nur dem Versprechen hinzu, das sie der ersten Anfrage zurück gegeben hat? – boatcoder