Узел Unzipper - как узнать, что он закончен - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь использовать модуль узла unzipper для извлечения и обработки ряда файлов (точное число неизвестно). Тем не менее, я не могу понять, как узнать, когда все файлы обрабатываются. Пока что мой код выглядит так:

s3.getObject(params).createReadStream()
.pipe(unzipper.Parse())
.on('entry', async (entry) => {
    var fileName = entry.path;
    if (fileName.match(someRegex)) {
        await processEntry(entry);
        console.log("Uploaded");
    } else {
        entry.autodrain();
        console.log("Drained");
    }
});

Я пытаюсь выяснить, как узнать, что unzipper прошел через все файлы (то есть, больше не будет entry событий) и все обработчики entry завершены, так что я знаю, что завершил обработку всех файлов, которые мне нужны.

Я попытался поэкспериментировать с событиями close и finishно когда у меня есть, они оба срабатывают до того, как напечатает console.log("Uploaded");, так что это не так.

Помощь?

1 Ответ

0 голосов
/ 29 сентября 2019

Непосредственно из документов :

Анализатор генерирует события finish и error, как и любой другой поток. Синтаксический анализатор дополнительно предоставляет оболочку обещаний вокруг этих двух событий, чтобы можно было легко сворачивать их в существующие структуры на основе Promise.

Пример:

fs.createReadStream('path/to/archive.zip')
  .pipe(unzipper.Parse())
  .on('entry', entry => entry.autodrain())
  .promise()
  .then( () => console.log('done'), e => console.log('error',e));
...