【问题标题】:Wait for an async method to finish等待异步方法完成
【发布时间】:2017-03-13 19:12:36
【问题描述】:

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

【问题讨论】:

    标签: node.js asynchronous


    【解决方案1】:

    看看这里:

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

    Node Hero - 了解 Node.js 中的异步编程

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

    在本章中,我将指导您了解异步编程原理,并向您展示如何在 JavaScript 和 Node.js 中进行异步操作。

    【讨论】:

    • 如果您觉得有帮助,请标记为答案或点赞
    【解决方案2】:

    感谢您的回答,我已经使用以下代码 -

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

    【讨论】:

      【解决方案3】:

      异步库(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(...);
      });
      

      这里 readingUnzipFiles 会在解压任务调用回调函数后执行。

      承诺

      另一种解决方案是使用类似 Q(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;
      }
      

      然后你可以使用如下函数:

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

      【讨论】:

      • 。谢谢。我的解压缩函数将许多文件写入文件系统,我只想在所有文件都写入后读取它们以进行处理。可以用上面的例子解决吗?
      • 我正在使用 fs.writeFile() 函数来写入每个文件。是他们在写入所有文件后获取回调的一种方式。谢谢
      • 你能更新你的代码实现来看看吗?
      • 哪个帖子?看不到
      • 查看答案部分。
      猜你喜欢
      • 2019-10-19
      • 2014-08-09
      • 2013-02-15
      • 1970-01-01
      • 2013-08-19
      • 2020-10-04
      • 2021-06-27
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多