ブログシステム用のファイルアップローダーを作成しようとしています。これにより、ユーザーはファイルをドロップするだけで、サーバーに自動的にアップロードされます。不思議なことに(私にとっては)、console.log
データがいっぱいになる前にdataArrayを出力しますが、タイムアウト後に呼び出すと正しく出力されます。
たとえば、ドロップ領域に4つのファイルをドロップすると、次のようになります。
[]
[file1, file2, file3, file4]
次に、アップロード/更新せずにさらに4つのファイルをドロップすると、次のようになります。
[file1, file2, file3, file4]
[file1, file2, file3, file4, file5, file6, file7, file8]
それで、私のスクリプトは何らかの理由で非同期的に機能していますか?誰かが私がここで間違っていることを教えてもらえますか?
var dataArray = [];
$('.dropArea').bind(
{
drop: function(e)
{
e.stopPropagation();
e.preventDefault();
var files = e.dataTransfer.files;
$.each(files, function(index, file)
{
var fileReader = new FileReader();
fileReader.onload = (function(file)
{
return function(e)
{
var image = this.result;
dataArray.push({
name : file.name,
value: image
});
}
})(files[index]);
fileReader.readAsDataURL(file);
});
console.log(dataArray);
setTimeout(function() { console.log(dataArray) }, 1000);
},
});