ファイルをアップロードするフォルダをユーザーが選択できるページがあります。ファイルを送信する前に、私はそれらを読んでデータをチェックする必要があります。すべてのファイルが非同期に読み取られるまで待ちます(FileReader)。
$('#folder-select').on('change', getValidFileList);
var fileList = [];
var getValidFileList = function(event) {
//Get the selected files
files = $(this).get(0).files;
for(var i=0; i<files.length; i++) {
checkFile(files[i]);
}
//Do something with the final fileList
console.log(fileList);
};
var checkFile = function(file) {
var reader = new FileReader();
reader.onload = function (event) {
//Here I parse and check the data and if valid append it to fileList
};
reader.readAsArrayBuffer(file);
};
私がアップロードしたファイルを表示/処理を維持するために結果のfileList配列を利用したいと思い、次のように私のコードが編成されています。 reader.onload()は非同期に呼び出されているので、for
ループの後のconsole.log(fileList)
の結果は空の配列です(reader.onload()
が起動する前に実行されます)。すべてのファイルが読み込まれてfileListに追加されるまで待つ方法はありますか?
は、あなたの答えをいただき、ありがとうございます。この解決策は私のために働いた:)唯一の違いは、 'getValidFileList()'の代わりに 'checkFile()'関数にコールバックを渡さなければならなかったことです。 – Darya