FileSystemAPI 不适用于包含大量文件的目录?

问题描述

我正在使用下面的代码,它使用 FileSystemAPI 和 webworker

const worker = new Worker( "worker.js" );
btn.onclick = async (evt) => {
  const dirHandle = await showDirectoryPicker();
  worker.postMessage( dirHandle );
};
worker.onmessage = (evt) => {
  console.log( evt.data );
  document.querySelector("pre").textContent = JSON.stringify( evt.data,(key,value) => {
    if( value instanceof Blob ) {
      return { name: value.name,size: value.size,type: value.type };
    }
    return value;
  },4 );
}

worker.js

onmessage = async (evt) => {
  const out = {};
  const dirHandle = evt.data;  
  await handleDirectoryEntry( dirHandle,out );
  postMessage( out );
};
async function handleDirectoryEntry( dirHandle,out ) {
  for await (const entry of dirHandle.values()) {
    if (entry.kind === "file"){
      const file = await entry.getFile();
      out[ file.name ] = file;
    }
    if (entry.kind === "directory") {
      const newHandle = await dirHandle.getDirectoryHandle( entry.name,{ create: false } );
      const newOut = out[ entry.name ] = {};
      await handleDirectoryEntry( newHandle,newOut );
    }
  }
}

https://glitch.com/edit/#!/navigate-sub-directory-from-a-worker?path=worker.js%3A5%3A21

以上适用于小型数据集,但目录包含 1000 多个文件,但无法正常工作。

感谢任何帮助或输入。谢谢!

解决方法

您的代码是正确的,我刚刚成功地让它在我的机器(MacBook Pro 2020)上遍历了 1K+ 个文件。如果您再次遇到此问题,请提交 new.crbug.com(使用此链接预先填充工程团队需要的所有信息的错误)。随意在此处发布错误 ID,我很乐意进行分类。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...