Verwendung von provey in forEach Schleife des Arrays zum Auffüllen eines Objekts

8

Ich führe eine FOREACH-Schleife für ein Array aus und führe zwei Aufrufe aus, die Versprechungen zurückgeben, und ich möchte ein Objekt mit this.options füllen und dann andere Sachen damit machen. Im Moment laufe ich in das Async-Problem, wenn ich das folgende Codebeispiel benutze und ich gehe zuerst in die then-Funktion.

%Vor%

Dieser Code funktioniert unten, aber er funktioniert nur für das erste Element im Array, weil ich die resultierende Funktion in .then der Antwort aufruft. Ich möchte alle holen zuerst für alle Elemente des Arrays und dann rufen Sie die resultierende Funktion, etwas zu tun.

%Vor%

Wie befülle ich das self.files -Objekt, nachdem die forEach-Schleife abgeschlossen ist, und rufe dann die resultierende Funktion mit dem Dateiobjekt auf?

    
rond 13.07.2016, 21:45
quelle

4 Antworten

23

Promise.all() wird hier hilfreich sein:

%Vor%

Dies startet den AJAX-Aufruf für jedes der Elemente, fügt das Ergebnis jedes Aufrufs zu self.files hinzu, sobald der Aufruf abgeschlossen ist, und ruft self.resultingFunction() auf, nachdem alle Aufrufe abgeschlossen wurden.

Bearbeiten: Vereinfachend basierend auf den Vorschlägen von Yury Tarabanko.

    
Timo 13.07.2016, 21:50
quelle
4

Nur eine kleine Variation der oben genannten akzeptierten Lösung wäre:

%Vor%     
IonicBurger 10.08.2017 10:50
quelle
1

Der folgende Code ist ein einfaches Verständnis der Synchronisierung mit Promise.

%Vor%

Im obigen Beispiel wird das Array nums für 5 Sekunden gehalten. und es wird nach der Veröffentlichung auf der Konsole gedruckt.

    
jasmeetsohal 22.03.2018 11:57
quelle
0

Sie können sich diese Antwort auf eine ähnliche Frage ansehen , um einen hervorragenden Hinweis zu erhalten. Die dort angegebene Lösung verwendet Array#reduce() , um zu vermeiden, dass alle Promises angesammelt werden müssen, bevor eine Arbeit ausgeführt wird, anstatt Promise.all() zu verwenden.

    
Alan Mimms 17.08.2017 21:43
quelle