Выполнение массива запросов перед обратным вызовом

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

    _.each (fieldValSQL, function (sql, fieldKey) {
      conn.query (sql, function (err, result) {
        fields [fieldkey] = результат;
      }); 
    });

    // это должно выполняться последним
    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();
  }); 
});
Другие вопросы по тегам