У меня есть большое количество файлов (миллионов), которые я хочу скопировать из папки в другую, но затем, основываясь на некоторых параметрах синтаксического анализа, мне нужно будет удалить файл, если он не соответствует некоторым критериям.
Я выполняю синтаксический анализ моей локальной копии файла, потому что в сети он будет медленнее разбирать (читать файл + разбирать), чем делать это локально.
Мой код выглядит так:
for (let file of files) {
fs.copyFile(from, to, err => {
if (err) return;
parse(file);
});
}
Функция parse
выглядит примерно так:
parse = file => {
fs.readFile(file, (err, data) => {
//do some parsing
if (notOk) {
fs.unlink(file);
};
}
}
Проблема в том, что он выполняет все copyFile
и, похоже, не выполняет обратный вызов с unlink
, и мне действительно нужно отменить связь, как только файл закончит копирование, так как я не могу себе позволить дисковое пространство, чтобы сначала скопировать все файлы.
Нужно ли использовать Sync
версию этих методов или что-то еще?
Спасибо
Я бы ожидал такой вывод:
copyFile a
copyFile b
copyFile c
parsing a
copyFile d
unlink a
parsing b
copyFile e
...
но вместо этого у меня есть все copyFile
, и ничего из этого не происходит.