2014-01-16 5 views
0

Что я хочу сделать, это цикл через объект sql-запросов, выполнять их один за другим при получении результатов, а затем вызывать обратный вызов после того, как все будет завершено. Вот код:Выполнение массива запросов перед обратным вызовом

 
    _.each(fieldValSQL, function(sql, fieldKey) { 
     conn.query(sql, function(err, result) { 
     fields[fieldkey] = result; 
     }); 
    }); 

    //this should execute last 
    cb(); 

ответ

1

Попробуйте это. По завершении каждого запроса запускается функция, которая проверяет, успешно ли выполнены все запросы, и если да, то выполняет ли обратный вызов.

var totalQueries = fieldValSQL.length; 
var doneQueries = 0; 

var doneChecker = function() { 
    if (totalQueries == doneQueries) { 
    //this should execute last 
    cb(); 
    } 
} 

_.each(fieldValSQL, function(sql, fieldKey) { 
    conn.query(sql, function(err, result) { 
    fields[fieldkey] = result; 
    doneQueries++; 
    doneChecker(); 
    }); 
}); 
Смежные вопросы