Вернуть количество файлов в пакете ZIP с NodeJS
Вот моя функция, чтобы получить количество файлов в пакете ZIP.
// check if .ZIP package contains at least one HTML file and return number of files
function validateArchive(path, callback) {
var filesCount = 0;
var unzipParser = unzip.Parse();
var readStream = fs.createReadStream(path).pipe(unzipParser);
unzipParser.on('error', function(err) {
throw err;
});
readStream.on('entry', function (entry) {
var fileName = entry.path;
var type = entry.type; // 'Directory' or 'File'
if (type == 'File') {
var fext = fileName.split('.')[1];
if (fext === 'html') {
filesCount++;
}
}
entry.autodrain();
});
// returns number of files
setTimeout(function () {
callback(filesCount);
}, 1000);
}
Как вы видите, у меня проблема с возвратом количества файлов, потому что асинхронный процесс на месте.
Любые идеи, чтобы вернуть количество файлов без использования setTimeout
метод?
1 ответ
Решение
Вы можете слушать close
событие:
unzipParser.on('close', function() {
callback(filesCount);
});
который испускается, когда достигнут конец почтового индекса.