我在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的異步性質,我遇到了兩個問題。首先,爲每個FileReader實例啓動onprogress
事件。這給了我每個文件的進步。而我打算顯示所有文件的總進度而不是單個文件。
其次,我想執行只應在FileReader的所有實例(每個文件一個)完成時才執行的操作。目前,由於FileReader是異步運行的,所以在FileReader完成任務之前運行這些操作。我搜索了很多,但還沒有找到解決這些問題的方法。任何幫助表示讚賞。
只需幾分鐘的時間,我實現了這個相同的解決方案,並回到這個問題,發現你碰巧建議我實現了什麼。對於進展我不需要粒度值。所以我最終計算進度爲'var progress = parseInt(((loaded/totalNumberOfFiles)* 100),10);'。謝謝您的幫助。 – John 2013-05-08 17:48:54
太好了,希望這對其他人也有幫助。 – undefined 2013-05-08 18:35:42