等待asynchronous方法完成

我正在写一个节点js函数解压缩文件,并进一步阅读解压缩的文件进一步处理。 问题是,在文件asynchronous解压缩之前,读取函数会启动,并且会出现文件未find错误。 请在读取文件触发器之前build议可能的方法等待解压缩过程。

看看这里:

https://blog.risingstack.com/node-hero-async-programming-in-node-js/

节点英雄 – 了解Node.js中的asynchronous编程

这是名为Node Hero的教程系列的第三篇文章 – 在这些章节中,您可以学习如何开始使用Node.js并使用它来交付软件产品。

在本章中,我将通过asynchronous编程原则指导您,并向您展示如何在JavaScript和Node.js中执行asynchronous。

asynchronous库( 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是在解压任务调用callback函数时执行的。

Promisses

另一个解决scheme是使用像Q这样的promisse模块( https://github.com/kriskowal/q ):

 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; } 

那么你可以使用这样的function:

 unzip('file.zip', '/output').then(function() { processZipFiles(); }); 

感谢您的答案,我已经得到它与以下代码工作 –

 fs.createReadStream('master.zip') .pipe(unzip.Extract({ path: 'gitdownloads/repo' })) .on('close', function () { ... });