我正在关注文件夹上传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 :(得分:0)
当你的traverseFileTree
没有第三个参数时,你应该如何做到这一点,这可能是回调?
function traverseFileTree(item, path, CALLBACK){...}
此外,该功能虽然未分配给参数,但在该功能内部甚至无法调用。你期望它如何运行?
您需要添加一些逻辑来向您的函数指示它已访问所有节点。 然后你调用回调。:
function traverseFileTree(item, path, callback){
...
if(allNodesAccessed) callback.call(null);
...
}