【问题标题】:async.series inside an asynchronous grunt task异步 grunt 任务中的 async.series
【发布时间】:2015-08-26 04:41:07
【问题描述】:

我有一个异步运行的任务(使用 this.async),因为我在代码中有异步函数。我还希望几个任务可以串行运行,所以我使用了 async npm 模块中的 async.series。 问题是当我到达 async.series 的最后一个回调,即 function(err, result) 时,我调用了 done() 来通知异步 grunt 任务已成功完成,它有时会失败,有时会通过。我似乎无法理解它。代码如下:

grunt.registerTask('aggCompJSON', function(){
  var done = this.async();
  var resultFile = {};  // final JSON object
  var groupJSON = {};   // groups JSON object

  async.series([
    function(callback){
        // get Application Configuration
        __getAppConfig(grunt, callback);
    },

    function(callback){
        // generate Component_map
        __genCompMap(grunt, callback);
    }
  ], function (err, result){
        done();
    }
  );

我收到以下错误:

致命错误:ENOENT,打开“logs/app.log”

有时也很成功。任何输入表示赞赏。 谢谢

附:没有任何函数返回错误。 err 对象在 最后一个回调总是null

【问题讨论】:

  • 为什么__genCompMap需要两个回调:donecallback
  • 你是对的。没有必要这样做。我改变了逻辑并忘记删除它。我已经更新了代码。感谢您指出。
  • 您是否在错误发生时捕捉到错误并将它们作为回调函数的第一个参数传递?如果您不这样做,async.series 将不会知道发生了错误。
  • 是的!每当出现错误时,我都会调用带有错误的回调。奇怪的是,它有时会失败,有时会成功运行。
  • 能否请您发布返回错误的函数的内容?

标签: javascript node.js asynchronous gruntjs npm


【解决方案1】:

感谢您的帮助@RodrigoMedeiros。是的,你是对的,我试图在其中一个函数中 require 一个模块,但它的行为出乎意料。解决方法是检查哪些语句可能由于 grunt 任务的异步执行而导致错误。就我而言,我删除了这些陈述,它们是不必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2014-02-17
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多