Node.js 上载大量文件时,节点脚本会导致系统冻结

Node.js 上载大量文件时,节点脚本会导致系统冻结,node.js,electron,fs,Node.js,Electron,Fs,我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上载到S3。这对于较小的文件集很有效,但对于较大的文件集,它会导致计算机冻结并在系统崩溃时重新启动(Macbook pro 2018)。我测试过的一个大文件集包含大约600个文件(每个文件都很小,小于1MB) 我无法从脚本本身获得任何错误,因此调试有点困难。我可以猜测,这必须是对多个fs.lstatSync或对多个put同时激活 我想要一些关于如何调试这个的建议(很难,因为计算机冻结了

我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上载到S3。这对于较小的文件集很有效,但对于较大的文件集,它会导致计算机冻结并在系统崩溃时重新启动(Macbook pro 2018)。我测试过的一个大文件集包含大约600个文件(每个文件都很小,小于1MB)

我无法从脚本本身获得任何错误,因此调试有点困难。我可以猜测,这必须是对多个
fs.lstatSync
或对多个
put
同时激活

我想要一些关于如何调试这个的建议(很难,因为计算机冻结了),或者关于有多少打开的
fs.lstatSync
put
是稳定的

const upload = (): void => {
  const fileUploadPromises = [];
  const userDataPath = remote.app.getPath('temp');

  let i = 0;

  let bytes = 0;
  let totalBytes = 0;
  let lastUpdate = 0;

  for (const file of filenames) {
    const filePath = `${userDataPath}chunks/${file}.ts`;
    const stats = fs.lstatSync(filePath);
    const { size } = stats;
    const createdFile = createFileData.createFile[i];

    totalBytes = totalBytes + size;

    fileUploadPromises.push(
      put({
        url: createdFile.presignedPutUrl,
        body: fs
          .createReadStream(filePath)
          .on('data', c => {
            bytes += c.length;

            const stepSize = totalBytes / 100;

            if (bytes - lastUpdate > stepSize) {
              setProgress(bytes / totalBytes);
              lastUpdate = bytes;
            }
          })
          .on('error', e => {
            console.error(e); // eslint-disable-line
          }),
        headers: {
          'Content-length': size,
        }
      }).catch(e => {
        console.error(e); // eslint-disable-line
      })
    );

    i = i + 1;
  }
};

我也有同样的问题,但文件上传成功,但在最后一块系统挂起,有什么解决方案吗