У меня есть задачи grunt, которые выполняются асинхронно (с использованием this.async), поскольку у меня есть асинхронные функции в коде. Я также хочу, чтобы несколько задач запускались последовательно, поэтому я использую async.series из модуля async npm. Проблема заключается в том, что когда я достигаю последнего обратного вызова функции async.series i.e (err, result), я вызываю done(), чтобы сообщить, что задача асинхронного grunt была успешно завершена, иногда она терпит неудачу и иногда проходит. Кажется, я не понимаю этого. Вот код:async.series внутри задачи асинхронного 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();
}
);
Я получаю следующее сообщение об ошибке:
Fatal error: ENOENT, open 'logs/app.log'
, а также иногда успех. Любой вход оценивается. Благодаря
P.S. None of the functions return error. The err object in the last callback is always null.
Почему '__genCompMap' требует двух обратных вызовов:' done' и 'callback'? –
Вы правы. В этом нет необходимости. Я изменил логику и забыл ее удалить. Я обновил код. Спасибо, что указали это. – Gautam
Вы ловите ошибки, когда они происходят, и передавая их в качестве первых аргументов функций обратного вызова? Если вы этого не сделаете, 'async.series' не будет знать, что произошла ошибка. –