所以我有一个函数,它应该递归地返回一个文件夹中的所有文件,如下所示:
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个子目录的内容。 这种情况很少发生,如果有某种潜在的模式,我也无法察觉。 请救命!
我本想把这作为一个评论,但我没有足够的声誉
我不太清楚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
}
}