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