Javascript webkitGetAsEntry对象延迟

Javascript webkitGetAsEntry对象延迟,javascript,Javascript,我正在尝试读取一个已删除文件夹的目录结构,但是我遇到了一个问题,chrome无法在不添加延迟的情况下报告对象中正确的项目数量 对于我来说,对象在第一次和第二次日志记录之间丢失一个项目,然后在第三次日志记录中重新获得它,这没有任何意义 任何帮助都将不胜感激 更新:我做了更多的测试,发现即使从现有数组中复制值而不是读取文件结构,我仍然会遇到同样的问题 这里有一个更清楚地显示了这个问题 这看起来几乎是相同的,但是在这两种情况下,如果我拖动多个子文件夹而不是父文件夹,它们会多次触发。我希望能够拖动一个文

我正在尝试读取一个已删除文件夹的目录结构,但是我遇到了一个问题,chrome无法在不添加延迟的情况下报告对象中正确的项目数量

对于我来说,对象在第一次和第二次日志记录之间丢失一个项目,然后在第三次日志记录中重新获得它,这没有任何意义

任何帮助都将不胜感激

更新:我做了更多的测试,发现即使从现有数组中复制值而不是读取文件结构,我仍然会遇到同样的问题

这里有一个更清楚地显示了这个问题

这看起来几乎是相同的,但是在这两种情况下,如果我拖动多个子文件夹而不是父文件夹,它们会多次触发。我希望能够拖动一个文件夹的子文件夹或子文件夹的选择,让事件在末尾触发一次,所以基本上是在for循环的末尾

    // Works correctly
    console.log(itemList);

    // Doesn't log anything
    Object.keys(itemList).forEach(function(key)
    {
        console.log('where is this?', key, itemList[key]);
    });

    // Works correctly on my local server with 0ms delay
    // and on jsfiddle with 50ms
    setTimeout(function()
    {
        Object.keys(itemList).forEach(function(key)
        {
            console.log('ms delay', key, itemList[key]);
        });
    },50);

好的,我最终找到了一个有效的解决方案

我的观点是基于此的


好的,我最终找到了一个有效的解决方案

我的观点是基于此的


我在这个例子中没有遇到这个问题:我只是编辑了这个例子,将结果添加到一个对象中,然后在最后记录它们,我遇到了同样的问题。我不想在进行过程中输出结果,我正在尝试构建一个可以更新和操作的对象,然后使用函数进行渲染。我在这个示例中没有遇到这个问题:我只是编辑了这个示例,将结果添加到一个对象中,然后在最后记录它们,我遇到了同样的问题。我不想在进行过程中输出结果,我正在尝试构建一个可以更新和操作的对象,然后使用函数渲染它。
const target = document.getElementById('dropTarget');
let itemList = [];

target.ondragover = function(evt) {
  evt.preventDefault();
}

target.ondrop = function(e) {
  e.preventDefault();

  let items = e.dataTransfer.items;

  function scanFiles(item, index) {
    return new Promise(function(resolve) {
      if (item.isFile) {
                itemList.push(item.fullPath);
          resolve();
      } else if (item.isDirectory) {
        let directoryReader = item.createReader();

        directoryReader.readEntries(function(entries) {
          Promise.all(entries.map(scanFiles)).then(resolve);
        });
      }
    })
  }

  var p = Promise.all(Array.from(items, item => scanFiles(item.webkitGetAsEntry())));
  p.then(function() {
    //console.log(itemList);
    Object.keys(itemList).forEach(function(key) {
      console.log(key, itemList[key]);
    });
  })
}