Ich habe das Filereader API innerhalb einer genannt for-Schleife durchlaufen mehrere Dateiobjekte zu implementieren. Ich benutze FileReader, um die Vorschau von Bildern anzuzeigen.Wie Progress Bar und Rückrufe mit asynchroner Natur des Filereader
function() {
for (var i in Files) {
var fileReader = new FileReader();
fileReader.readAsBinaryString(Files[i]);
fileReader.onload = function() {
// do something on FileReader onload
}
fileReader.onprogress = function(data) {
if (data.lengthComputable) {
var progress = parseInt(((data.loaded/data.total) * 100), 10);
console.log(progress);
}
}
}
// do something on completion of FileReader process
// actions here run before completion of FileReader
}
Ich stoße auf zwei Probleme aufgrund der asynchronen Natur der FileReader API. Zuerst wird das Ereignis onprogress
für jede FileReader-Instanz ausgelöst. Dies gibt mir Fortschritte für jede Datei. Während ich beabsichtige, den Gesamtfortschritt für alle Dateien anstelle von einzelnen Dateien anzuzeigen.
Zweitens möchte ich Aktionen auszuführen, die nur dann ausgeführt werden, wenn alle Instanzen (eine für jede Datei) des Filereader abgeschlossen haben. Da FileReader derzeit asynchron funktioniert, werden die Aktionen ausgeführt, bevor FileReader die Aufgabe beendet. Ich habe viel gesucht und dennoch eine Lösung für diese Probleme gefunden. Jede Hilfe wird geschätzt.
Nur ein paar Minuten zurück habe ich die gleiche Lösung implementiert und bin zu dieser Frage zurückgekommen, um festzustellen, dass Sie genau das vorgeschlagen haben, was ich implementiert habe. Für den Fortschritt brauche ich keine granularen Werte. So kam ich den Fortschritt wie 'var Fortschritt Berechnung up = parseInt (((geladen/totalNumberOfFiles) * 100), 10);'. Danke für die Hilfe. – John
groß, dies wird hoffentlich auch ein paar andere helfen. – undefined