我正在编写一个节点js函数,该函数解压缩文件并进一步读取解压缩的文件以进一步处理。问题是,在文件异步解压缩之前,read函数会启动,并且会因找不到文件错误而失败。请建议在读取文件触发器之前等待解压缩进程的可能方法。
答案 0 :(得分:2)
看看这里:
https://blog.risingstack.com/node-hero-async-programming-in-node-js/
Node Hero - 了解Node.js中的异步编程
这是名为Node Hero的教程系列的第三篇文章 - 在这些章节中,您可以学习如何开始使用Node.js并使用它来交付软件产品。
在本章中,我将指导您完成异步编程原理,并向您展示如何在JavaScript和Node.js中执行异步。
答案 1 :(得分:0)
异步库(http://caolan.github.io/async/)
此库用于控制您拥有的功能的执行。
例如:
async.series({
unzip: function(callback) {
unzip('package.zip', function(err, data) {
if(!err)
callback(null, data);
});
}
}, function(err, results) {
// results is now equal to: {unzip: data}
readingUnzipFiles(...);
});
一旦解压缩任务调用回调函数,就会执行readUnzipFiles。
<强> Promisses 强>
另一个解决方案是使用像Q(https://github.com/kriskowal/q)这样的promisse模块:
function unzip(fileName, outputPath) {
var deferred = Q.defer();
fs.createReadStream(fileName)
.pipe(unzip.Extract({ path: outputPath }))
.on('end', function(){
deferred.resolve(result);
});
return deferred.promise;
}
然后你可以使用像:
这样的功能unzip('file.zip', '/output').then(function() {
processZipFiles();
});
答案 2 :(得分:0)
感谢您的回答,我已经使用了以下代码 -
fs.createReadStream('master.zip')
.pipe(unzip.Extract({ path: 'gitdownloads/repo' }))
.on('close', function () {
...
});