В настоящее время я пытаюсь создать конвейер данных, используя Node.js Конечно, это не лучший способ сделать это, но я хочу попробовать реализовать его в любом случае, прежде чем вносить улучшения в него.
Это ситуация
У меня есть несколько сжатых GZIP CSV-файлов на AWS S3. Я получаю эти "объекты", используя aws sdk
, как показано ниже, и превращаю их в readStream
const unzip = createGunzip()
const input = s3.getObject(parameterWithBucketandKey)
.createReadStream()
.pipe(unzip)
и, используя поток выше, создаю интерфейс readline
const targetFile = createWriteSTream('path to target file');
const rl = createInterface({
input: input
})
let first = true;
rl.on('line', (line) => {
if(first) {
first = false;
return;
}
targetFile.write(line);
await getstats_and_fetch_filesize();
if(filesize > allowed_size){
changed_file_name = change_the_name_of_file()
compress(change_file_name)
}
});
и это обернуто как обещание
, и у меня есть массив имен файлов, которые нужно извлечь из AWS S3, и сопоставьте этот массив имен файлов, как это
const arrayOfFileNames = [name1, name2, name3 ... and 5000 more]
const arrayOfPromiseFileProcesses= arrayOfFileNames.map((filename) => return promiseFileProcess(filename))
await Promise.all(arrayOfPromiseFileProcesses);
// the result should be multiple gzip files that are compressed again.
извините, я написал в псевдокод, если ему нужно больше для обеспечения контекста, тогда я напишу больше, но я подумал, что это даст общий смысл моей проблемы.
Моя проблема в том, что он хорошо пишет в файл, но когда я изменяю имя файла, он это не создает потом. Я потерялся в этом синхронном и асинхронном мире ...
Пожалуйста, дайте мне подсказку / ссылку для чтения. Спасибо.