我試圖遍歷目錄以使用Google Chrome的Filesystem API檢索文件。找出沒有被調用的函數
在線25 files.push(file);
,試圖填充files
數組似乎並沒有被調用。但是,如果我用console.log(file);
替換它,它會突然生效,但只能使用該功能。
任何人都可以解釋發生了什麼,我做錯了什麼?降大任DIR成以下的jsfiddle盒上看到:
http://jsfiddle.net/tekky/ZXU8v/8/
代碼:
var dndbox = $(".dndbox")[0];
dndbox.addEventListener("dragenter", function(e) {
e.stopPropagation();
e.preventDefault();
},false);
dndbox.addEventListener("dragover", function(e) {
e.stopPropagation();
e.preventDefault();
},false);
dndbox.addEventListener("drop", function(e) {
e.stopPropagation();
e.preventDefault();
var itemList = e.dataTransfer.items;
var files = [];
var traverse = function(entry)
{
if (entry.isFile) {
entry.file(function(file){
files.push(file);
});
} else if (entry.isDirectory){
var dR = entry.createReader();
dR.readEntries(function(entries) {
for(var i = 0; i < entries.length; i++)
{
traverse(entries[i]);
}
});
}
}
for(var i = 0; i < itemList.length; i++) {
var e = itemList[i].webkitGetAsEntry();
traverse(e);
}
console.log(files); //Empty?
},false);
承諾......看起來前途嘿嘿。但是你只能調用一次解析,我怎麼能解決這個問題,因爲函數是遞歸的?謹慎提供一個例子以及你的答案? – Tek
爲我更新了我的答案,也自己學了一些東西! :) – user1234
非常感謝!太糟糕的標準JS沒有'.when()'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 我想用它來實現它,但它似乎不可能? – Tek