Читайте zip файлы по одному с помощью unzipper - PullRequest
0 голосов
/ 18 марта 2020

Я использовал пакет 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
                })
        });
    }


...