2016-05-31 9 views
0

Ich habe einige javasctipt Code wie dieser https://jsfiddle.net/vhzqvx2e/20/ Wenn Sie 4 Dateien auswählen und schauen in die Konsole sehen Sie dieseJavascript „für“ Loopfunktionen Sequenz

1 
2 
3 
4 
4 
Object { name: "FireShot Capture 4", size: 54714, type: "image/png", preview: "data:image/png;base64,"[…] } 
4 - 
Object { name: "FireShot Capture 4", size: 54714, type: "image/png", preview: "data:image/png;base64,"[…] } 
4 - 
Object { name: "FireShot Capture 4", size: 54714, type: "image/png", preview: "data:image/png;base64,"[…] } 
4 - 
Object { name: "FireShot Capture 4", size: 54714, type: "image/png", preview: "data:image/png;base64,"[…] } 

Wie Sie bei fisrt sehen kann ich volle Schleife Konsole sehen .log (this.count); und dann läuft mein gesamter Code bei der letzten Schleife (nur Bildgrößen und Namen für das letzte Bild). Wie kann ich machen Leser und SomeCl.processM (info); bei jeder Schleife laufen, nicht 4 mal nach?

Antwort

1
  • Wrap Filereader Objekterstellung und 'Last' Rückruf innerhalb einer IIFE Funktion mit einer eigenen lexikalischen Gültigkeitsbereich

(function(file) { 
       var reader = new FileReader(); 
       reader.onload = function(e) { 
        info.preview = e.target.result; 
        console.log(SomeCl.count + " -") 
        SomeCl.processM(info); 
       }; 
       reader.readAsDataURL(files[i]); 
     })(files[i]); 

https://jsfiddle.net/bfzmm1hc/1

+0

Hmm, ich erhielt die gleiche Leistung in der Konsole. .. 1 2 3 4 und 4 mal Datei Info nach – user1128677

+0

Immer noch nicht bekommen. console.log (this.count); und Rückruf (auch SomeCl.processM (info)) in einer Schleife. Also gehen wir in die Schleife, console.log (this.count) zeige mir 1, dann sollte Callback ausgeführt werden, und dann für die zweite Schleife gehen. Aber jetzt bekomme ich nur das gleiche Ergebnis wie meiner – user1128677

+0

es ist asynchron. JavaScript ist eine single-threaded-Sprache, dh es kann immer nur eine Aufgabe ausgeführt werden. Die Schleifen gehen bis zum Ende und übergeben die i-Werte an die Funktion. und ruft dann nur die Funktionen auf. dann lädt der Filereader die Datei und ruft nur dann den Callback auf. – bfmags

Verwandte Themen