【发布时间】: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需要两个回调:done和callback? -
你是对的。没有必要这样做。我改变了逻辑并忘记删除它。我已经更新了代码。感谢您指出。
-
您是否在错误发生时捕捉到错误并将它们作为回调函数的第一个参数传递?如果您不这样做,
async.series将不会知道发生了错误。 -
是的!每当出现错误时,我都会调用带有错误的回调。奇怪的是,它有时会失败,有时会成功运行。
-
能否请您发布返回错误的函数的内容?
标签: javascript node.js asynchronous gruntjs npm