2016-03-09 6 views
1

Создание node.js для автоматической загрузки zip-файла, содержащего один текстовый файл со списком 5000 пользовательских идентификаторов и имен пользователей (CSV). Пример текстового файла будет:
12345,JSmith
728422,YPatelnode.js: как дождаться завершения «разархивации», прежде чем пытаться разобрать содержимое.

Каждый раз, когда я запускаю это, я получаю разные результаты. Я думаю, что вероятной причиной является попытка разобрать распакованный файл, прежде чем unzip завершит сохранение на диск.

Есть ли способ асинхронно разобрать распакованные данные или, по крайней мере, дождаться завершения распаковки, прежде чем пытаться проанализировать извлеченный файл? (Я также счастлив сделать весь этот процесс из памяти и избежать диска)

Я очень новичок в 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

Из документации:

Экстракт излучает «закрыть» событие, как только содержимое почтового индекса были полностью извлеченный на диск.

Вам необходимо прослушать событие 'close'.

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

// listen for close event and perform parse 
unzipExtractor.on('close', some_function_to_parse()); 
Смежные вопросы