Birden çok dosya nesnesinde yineleme yapmak için bir for döngüsünde çağrılan FileReader API'm var. Esasen görüntülerin önizlemesini görüntülemek için FileReader kullanıyorum.İlerleme Çubuğu ve Geri Aramalar, FileReader'ın asenkron doğasıyla nasıl uygulanır
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
}
FileReader API'sinin async niteliğinden dolayı iki soruna yanıt veriyorum. İlk olarak, her bir FileReader örneği için onprogress
olay patlar. Bu bana her dosya için ilerleme sağlıyor. Bununla birlikte, tek tek dosyalar yerine tüm dosyaların toplam ilerlemesini göstermeyi planlıyorum. Ikinci olarak, yalnızca FileReader'ın tüm örnekleri (her dosya için bir tane) tamamlandığında gerçekleştirilmesi gereken eylemleri gerçekleştirmek istiyorum. Şu anda, FileReader eşzamansız olarak çalıştığından, FileReader görevini tamamlamadan önce eylemler çalışır. Çok fazla arama yaptım ve bu sorunlara çözüm bulmak için geldim. Herhangi bir yardım takdir edilir.
Sadece birkaç dakika önce, bu aynı çözümü uyguladı ve uyguladığım şeyi önermek için olduğunu anladım. İlerleme için granüler değerlere ihtiyacım yok. Bu yüzden, ilerlemeyi "var progress = parseInt ((yüklenen/totalNumberOfFiles) * 100), 10);' olarak hesaplayarak bitirdim. Yardım için teşekkürler. – John
harika, umarım bu da birkaç kişiye yardımcı olacaktır. – undefined