提问者:小点点

fs.ReadDirSync并不总是返回文件夹的所有内容


所以我有一个函数,它应该递归地返回一个文件夹中的所有文件,如下所示:

async function getFiles(dir) {
  const subdirs = await fs.readdirSync(dir);
  const files = await Promise.all(
    subdirs.map(async (subdir) => {
      const res = resolve(dir, subdir);
      return (await stat(res)).isDirectory() && !subdir.startsWith("__")
        ? getFiles(res)
        : res;
    })
  );
  return files.reduce((a, f) => a.concat(f), files);
}

看起来很棒,对吧? 工作也很好,只是,并不总是。 我用一种非常简单的方式调用它,比如getfiles(“。/directory”),在一半的时间里,它返回所有的内容。 但有时,它会省略一个子目录的内容,而返回所有其他子目录。

所以,假设给定的目录有5个子目录,那么它将只返回4个子目录的内容。 这种情况很少发生,如果有某种潜在的模式,我也无法察觉。 请救命!


共1个答案

匿名用户

我本想把这作为一个评论,但我没有足够的声誉

我不太清楚promise的async/await方法,所以我不太确定我在说什么!

因此,可能有一个错误正在发生,但您看不到它,因为您没有拒绝或捕获任何东西。

我猜使用async/await方法,会在const中拒绝一个错误,然后您可以console.log()您的const,看看当您的函数省略了一些文件时,这是否是因为发生了错误!

对于最后一次等待,您将它放在返回中,也可以将它console.log()

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

https://javascript.info/async-await

在现实情况下,承诺可能需要一段时间才会被拒绝。 在这种情况下,在await抛出错误之前会有一个延迟。 我们可以使用try.。catch捕获该错误,方法与常规抛出相同:


  try {
    let response = await fetch('http://no-such-url');
  } catch(err) {
    alert(err); // TypeError: failed to fetch
  }
}