0

我正在关注文件夹拖放以进行文件夹上传。

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);
      }
    });
  }
}

上述递归结束条件检查不起作用。由于嵌套文件和文件夹的数量各不相同,因此检查递归结束的任何有效方法。

4

1 回答 1

0

当你traverseFileTree没有第三个参数时,你应该怎么做,这将是回调?

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

此外,该函数虽然没有被分配给参数,但甚至不会在该函数内部被调用。您希望它如何运行?

您需要添加一些逻辑来向您的函数指示它已访问所有节点。然后你调用回调。:

function traverseFileTree(item, path, callback){
  ...
  if(allNodesAccessed) callback.call(null);
  ...
}
于 2014-03-31T01:36:54.057 回答