等待异步方法完成

时间:2017-03-13 04:31:17

标签: node.js asynchronous

我正在编写一个节点js函数,该函数解压缩文件并进一步读取解压缩的文件以进一步处理。问题是,在文件异步解压缩之前,read函数会启动,并且会因找不到文件错误而失败。请建议在读取文件触发器之前等待解压缩进程的可能方法。

3 个答案:

答案 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 () {
...
});