2014-03-31 47 views
0

我正在關注文件夾上傳的Folder Drag Drop成功完成遞歸回調

function onDrop(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    var items = e.dataTransfer.items; 
    for (var i=0; i<items.length; i++) { 
    var item = items[i].webkitGetAsEntry(); 
    if (item) { 
     traverseFileTree(item, path="", function(){ 
     //Recursion Complete (Not invoked) 
     }); 
    } 
    } 
} 
var setFlag = true; 
function traverseFileTree(item, path, callback) { 
    path = path || ""; 
    if (item.isFile) { 
    item.file(function(file) { 

     if(setFlag)callback(null); 
    }); 
    } else if (item.isDirectory) { 
    var dirReader = item.createReader(); 
    dirReader.readEntries(function(entries) { 
     for (var i=0; i<entries.length; i++) 
     if(entries[i].isDirectory)setFlag = false; 

     for (var i=0; i<entries.length; i++) { 
     traverseFileTree(entries[i], path + item.name + "/",callback); 
     } 
    }); 
    } 
} 

以上條件檢查遞歸結束不起作用。由於嵌套文件和文件夾的數量有所不同,因此可以使用任何有效的方法來檢查遞歸結束。

回答

0

當你的traverseFileTree沒有第三個參數時,你應該怎麼做呢?

function traverseFileTree(item, path, CALLBACK){...} 

此外,該函數,雖然沒有被分配給參數,甚至不會被調用該函數。你如何期待它運行?

您需要添加一些邏輯來向您的函數指示它已經訪問了所有節點。 然後調用回調函數:

function traverseFileTree(item, path, callback){ 
    ... 
    if(allNodesAccessed) callback.call(null); 
    ... 
} 
+0

是的,我已經改寫相應的問題。我的問題是'allNodesAccessed'邏輯部分。 –