2014-03-31 49 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'逻辑部分。 –