Я использовал пакет unzipper , чтобы загрузить zip-файл и извлечь его в буфер в памяти. Я хотел бы прочитать каждый CSV-файл по одному и отправить sh данные в Redis DB.
Моя проблема в том, что это триггер события finish
до того, как файл потока завершен sh.
Я взял пример из документации по unzipper npm package
private async extractFiles(file,cb) {
return new Promise( async (resolve, reject) => {
let counter:number = 0;
this.items = [];
await file.stream()
.pipe(csv())
.on('data', async (row) => {
row['iteration'] = counter;
this.items.push(row)
counter++
if(counter >= 10000){
counter =0
try {
await cb(this.items);
this.items = [];
}catch (e) {
throw Error(e)
}
}
}).on('error',async (e)=>{
reject(`${file.path} - Error - ${e}`)
throw Error(`${file.path} - Error`)
}).on('finish', async ()=>{
console.log(`${file.path} - ${counter}`)
resolve(`${file.path} - Done`) <----- It's resolve the promise before it's finish
})
});
}