forループ内で呼び出されるFileReader APIを使用して、複数のファイルオブジェクトを反復処理します。私は基本的に画像のプレビューを表示するためにFileReaderを使用しています。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
}
私はFileReader APIの非同期性のために2つの問題にぶつかります。最初に、各FileReaderインスタンスに対してonprogress
イベントが発生します。これにより、各ファイルの進捗状況がわかります。一方、私は個々のファイルの代わりにすべてのファイルの合計進行状況を表示するつもりです。
第2に、FileReaderのすべてのインスタンス(各ファイルに1つ)が完了したときに実行する必要があるアクションを実行します。現在、FileReaderは非同期に機能しているため、FileReaderが処理を完了する前にアクションが実行されます。私はたくさんの検索をしてきましたが、まだこれらの問題の解決策を見つけることはありません。どんな助けもありがとうございます。
私はこの同じソリューションを実装し、この質問に戻って、私が実装したものを正確に提案していることがわかりました。進歩のために、私は細かい値を必要としません。だから私は 'var progress = parseInt(((loaded/totalNumberOfFiles)* 100)、10);'というように進捗状況を計算しました。助けてくれてありがとう。 – John
偉大な、うまくいけば、これは他のいくつかの同様に役立つでしょう。 – undefined