2014-09-17 3 views
0

в следующем коде я ожидаю функция finalCallBack будет выполняться один раз мы сделали перебор всех элементовиспользование Async.each отказывается назвать окончательный CallBack

var rows = [ 
    { name: 'first'}, 
    { name: 'second'} 
]; 

var execForEachRow = function(row, callback){ 

    var studentModel = new StudentModel(row); 
    studentModel.save(function(err,result){ 
    if (err) { throw err;} 
    rowsSavedCount++; 
    }); 
} 

var finalCallBack = function(err){ 
    if (err) { msg = err;} else { msg = rowsSavedCount;} 
    res.send({"result" : msg}); 

} 

async.each(rows, execForEachRow, finalCallBack); 

Когда я выполнить приведенный выше код, он очень успешно вставляет данные в коллекцию монго. Однако finalCallBack не вызывается.

Любые подсказки, что мне здесь не хватает?

+0

Ну, если 'exexForEachRow' отказывается вызывать свой собственный обратный вызов, это неудивительно ... – Bergi

ответ

0

Вы пропустили вызова обратного вызова в функции обратного вызова studentModel.save «s:

studentModel.save(function(err,result){ 
    if (err)   
     return callback(err); 
    rowsSavedCount++; 
    callback(null); 
}); 

Также - бросать исключение не является хорошей идеей - сломаю тебя весь сервер Экспресс.

+1

Правильный способ пропускать ошибки с помощью async - это сделать обратный вызов (err);' in 'execForEachRow'. Это немедленно прекратит ожидание обратных вызовов и вызовет 'finalCallback' с ошибкой. – nickclaw

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