Все вызовы функций, которые отображаются в вашем массиве подкаталогов, выполняются одновременно, и если вы просто нажмете на свой массив-накопитель, то вообще не будет гарантированного порядка.
Чтобы исправить это, либо проследуйте по каталогам последовательно:
async function readDirRecursive(dir, acc = []) {
for (const file of await readdir(dir)) {
const path = join(dir, file);
if ((await stat(path)).isDirectory()) {
acc.push(path);
await readDirRecursive(path, acc);
}
}
return acc;
}
или просто не используйте общий аккумулятор, но правильно объедините результат одновременных обходов в нужном вам порядке:
async function readDirRecursive(dir) {
const paths = await Promise.all((await readdir(dir)).map(async file => {
const path = join(dir, file);
if ((await stat(path)).isDirectory())
return [path, ...await readDirRecursive(path, acc)];
else
return [];
});
return [].concat(...paths);
}