2016-03-09 12 views
1

創建一個node.js以自動下載zip文件,其中包含一個包含5000個用戶標識和用戶名(CSV)列表的文本文件。一個例子文本文件將是:
12345,JSmith
728422,YPatelnode.js:在嘗試解析內容之前如何等待「解壓縮」完成

我每次運行此,我得到不同的結果。 我認爲可能的原因是我試圖解析解壓縮文件之前,解壓縮已完成保存到磁盤。

在嘗試解析解壓縮的文件之前,有沒有辦法異步解析解壓縮的數據,或者至少等到解壓縮完成後才能解析? (我也很樂意從內存做這整個過程,並避免磁盤)

我對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()) 

回答

1

從技術文檔:

提取發出「關閉」事件,一旦壓縮的內容已經完全 提取到磁盤。

您需要聽取'關閉'事件。

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

// listen for close event and perform parse 
unzipExtractor.on('close', some_function_to_parse()); 
相關問題