node.js:如何在尝试parsing内容之前等到“解压缩”完成

创build一个node.js自动下载一个zip文件,其中包含一个文本文件,其中包含5000个用户标识和用户名(CSV)列表。 示例文本文件将是:
12345,JSmith
728422,YPatel

每当我运行这个,我得到不同的结果。 我想可能的原因是我试图parsing解压缩文件之前,解压缩已经完成保存到磁盘。

有没有一种方法来asynchronousparsing解压缩的数据,或者至less等到解压缩完成之后,才尝试parsing解压缩的文件? (我也很乐意从内存中完成这个过程,并避免使用磁盘)

我对node.js很新。

 function downloadAndUnzip(URL, doWhenFinished){ require('request') .get(URL) .on('error', function(error) { console.log(error) }) .on('end', doWhenFinished) .pipe(require('unzip').Extract({path:'./'})) } var parseFile = function(){ var fs = require('fs') var array = fs.readFileSync('usernames.txt').toString().split("\n\r"); for (i in array) { user = array[i].split(","); console.log("UserID: " + user[0] + " Username: " + user[1]); } } } DownloadAndUnzip(URL, parseFile()) 

从文档:

一旦压缩文件的内容被完全提取到磁盘,提取就会发出“closures”事件。

您需要倾听“closures”事件。

 var unzip = require('unzip'); var unzipExtractor = unzip.Extract({ path: './'}); // listen for close event and perform parse unzipExtractor.on('close', some_function_to_parse());