2015-06-26 2 views
2

Я уже несколько часов ударяю головой об этом фрагменте кода. Кроме того, я использовал «async.each« несколько раз раньше. Может быть, код просто нуждается в другом наборе глаз для работы. Вот код и проблема.async.each callback после завершения всех итераций

async.each(process.argv, function(file, callback){ 
    runFile(file, callback); 

}, function(err){ 
    console.log("Here is the error!:" + err +"files to unstage: " + filesToUnstage) 

    if(err) 
     console.log(err); 
    else{ 
     if(filesToUnstage) { 
      __unstage(); 
     } 
    } 
}); 

runFile:

function runFile(filename, callback) { 
    // Do a bunch of stuff .... 
    __parseOutput(output, callback); 
} 

__parseOutput:

function __parseOutput(output, callback){ 
    //Do some if else statement and do console.log 
    return callback(null); 
} 

Проблема: Окончательный обратного вызова, т.е. function(err){..} из async.each не вызывается после того, как все итерации закончили.

+0

выполнен ли ваш runFile? Также является process.argv пустым массивом? –

+0

Yup! все выполняется отлично, и я получаю желаемые выходы из всех функций, кроме последнего обратного вызова, как указано выше. Нет 'process.argv' не пуст (перепроверен). – Gautam

+0

В свой '// Делать некоторые инструкции if else и делать console.log', может быть, вы не вызываете свой обратный вызов. – Gepser

ответ

1

Вся эта проблема вызвана асинхронным методом, вызываемым между обратными вызовами. Я ждал завершения этой проблемной функции, а затем вызвал callback. В моем случае я использовал async.waterfall, чтобы ждать, когда мне пришлось передавать значения от одного к другому. По аналогичным проблемам, пожалуйста, прочитайте комментарии по этому вопросу, и особенно по @Gepser.

Смежные вопросы