Первоначально опубликовано в моем блоге.
Недавно мне нужно было просканировать содержимое очень большой директории, чтобы выполнить некоторые операции над каждым файлом.
Я хотел, чтобы эта операция была как можно быстрее, поэтому я знал, что если бы я использовал стандартные fsPromises.readdir
или fs.readdirSync
, которые читают каждый файл в каталоге за один проход, мне пришлось бы ждать, пока весь каталог будет прочитан, прежде чем работать с каждым файлом.
Вместо этого я хотел работать с файлом в тот момент, когда он был найден.
Чтобы решить эту проблему, я обратился к opendir
(добавлена v12.12.0
), который будет перебирать каждый найденный файл по мере его нахождения:
import { opendirSync } from "fs";
const dir = opendirSync("./files");
for await (const entry of dir) {
console.log("Found file:", entry.name);
}
fsPromises.opendir
/openddirSync
возвращают экземпляр Dir
, который является итерабельным и возвращает Dirent
(запись каталога) для каждого файла в каталоге.
Это более эффективно, поскольку возвращает каждый файл по мере его нахождения, вместо того, чтобы ждать, пока все файлы будут собраны.
Небольшой совет по Node.js для вас 🪄.
Следите за мной на Dev.to, Twitter и Github, чтобы узнать больше о веб-разработке и стартапах.