Node Unzipper-如何知道它已经完成

时间:2019-09-29 20:02:02

标签: node.js unzip synchronous

我正在尝试使用解压缩节点模块来提取和处理许多文件(确切数目未知)。但是,我似乎无法弄清楚如何知道何时处理所有文件。到目前为止,我的代码如下:

[1]

我正在尝试弄清如何知道解压缩已遍历所有文件(即不再发生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"); } }); 事件)和所有entry 处理程序已经完成,所以我知道我已经处理完所有我关心的文件。

我曾尝试对entryclose事件进行试验,但是当我遇到这些事件时,它们都在finish打印之前触发,因此似乎不正确。

帮助?

1 个答案:

答案 0 :(得分:0)

直接from the docs

  

解析器像其他任何流一样发出finisherror事件。解析器还为这两个事件提供了一个Promise包装,以便轻松折叠到现有的基于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));