Übergeben einer Variablen an eine asynchrone Funktion (Versprechen) in Javascript

8

Ich habe den folgenden Code, der in einer Schleife läuft :

%Vor%

Das Problem, das ich habe, ist, dass ich versuche, ein Objekt mit 2 Eigenschaften in einem Array zu speichern. Dieses Objekt sollte den Bezeichner und das Ergebnis haben. (fileName bzw. fileURL). Aber da diese Funktion asynchron ist (ausgeführt durch ein Versprechen). Zu dem Zeitpunkt, an dem "getFileAsBlob" beendet wird, wurde currentImageName bereits aktualisiert, was letztlich dazu führte, dass viele meiner Objekte den gleichen Bezeichner hatten (der letzte, der vor der Fertigstellung bearbeitet wurde).

Das könnte ein wirklich einfaches Problem sein, aber ich bin sehr neu in Javascript und habe noch nichts darüber gefunden.

Ich dachte, die Lösung könnte die Variable an die "done" -Funktion übergeben, aber ich denke, dass diese Funktion von der Methode zurückgegeben wird und bereits gesetzt ist. (Ich weiß nicht, wie es aussieht)

Bearbeiten:

Der Code ist nur innerhalb einer normalen Schleife

%Vor%     
Pochi 15.01.2014, 14:03
quelle

2 Antworten

8

Erstellen Sie also eine Funktion, damit die Variable nicht geändert werden kann

%Vor%

und rufe es an

%Vor%

oder Sie können etwas wie

tun %Vor%

MDN Closure

    
epascarello 15.01.2014, 14:08
quelle
4

Die Lösung für dieses Problem ist immer die gleiche: Verwenden Sie einen Verschluss.

Da Sie jedoch eine auf Versprechen basierende Bibliothek verwenden, haben Sie eine bessere Option. Verwenden Sie Versprechen. (Intern basiert dies natürlich auch auf Schließungen. Es ist nur eine viel bessere Abstraktion.)

%Vor%

Nun können Sie dies tun, wobei refreshKMZList() einmal pro Datei aufgerufen wird:

%Vor%

oder auch hier, wobei refreshKMZList() nur einmal pro Gesamtwert aufgerufen wird:

%Vor%

Lesen Sie Versprechungen, sie sind es wert, verstanden zu werden.

    
Tomalak 15.01.2014 14:39
quelle

Tags und Links