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

Mtl*_*Dev 3 javascript node.js

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

每次我运行这个,我都会得到不同的结果。我认为可能的原因是我试图在解压缩完成保存到磁盘之前解析解压缩的文件。

在尝试解析提取的文件之前,有没有办法异步解析解压缩的数据,或者至少等到解压缩完成?(我也很乐意从内存中完成整个过程,并避免使用磁盘)

我对 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())
Run Code Online (Sandbox Code Playgroud)

小智 6

从文档:

一旦 zip 的内容完全提取到磁盘,Extract 就会发出 'close' 事件。

您需要监听 'close' 事件。

var unzip = require('unzip');
var unzipExtractor = unzip.Extract({ path: './'});

// listen for close event and perform parse
unzipExtractor.on('close', some_function_to_parse());
Run Code Online (Sandbox Code Playgroud)