2015-04-30 2 views
0

мой код:Как дождаться выполнения запроса в базе данных?

 jsonArray.forEach(function (that) { 
      db.each(sql, function (err, row) { 
      }, function (err, rows) { 
       console.log("111"); 
      }); 
     }); 
     console.log("222"); 

после запуска первой записи является 222. Как ждать db.each писать 111 затем 222? благодаря

Редакцией:

console.log("222"); после цикла.

+1

взглянуть на async.js и его eachSeries функционировать – Molda

+0

, почему вы не можете разместить эту строку внутри самого обратного вызова? я имею в виду после console.log («111»); ? – Robin

+0

Привет @Robin, 'console.log (" 222 ");' is after loop. – hahamed

ответ

2

Для того, чтобы убедиться, что «222» регистрируется после того, как «111», вы должны были бы сделать это:

jsonArray.forEach(function (that) { 
    db.each(sql, function (err, row) { 
    }, function (err, rows) { 
     console.log("111"); 
     console.log("222"); 
    }); 
}); 

Это потому, что вторая функция передается db.each() гарантированно будет называться после запрос БД завершен. Поскольку запрос БД выполняется асинхронно, вы не можете зарегистрировать «222» сразу после запуска запроса и ожидать его надежного отображения после «111».

Теперь, если вы на самом деле хотел «111», чтобы распечатать с каждым результатом строки, вы хотите что-то вроде этого:

jsonArray.forEach(function (that) { 
    db.each(sql, function (err, row) { 
     console.log("111"); 
    }, function (err, rows) { 
     console.log("222"); 
    }); 
}); 
+0

Thanx @cybersam. но я редактировал свой код. Я хочу, чтобы 222 было подано в конце всех 111. – hahamed

+0

Что значит «все» 111 «'? Вы должны увидеть только один «111» с вашим исходным кодом. Смотрите мой обновленный ответ за то, что вы сделали бы, чтобы увидеть «111» с каждой строкой результата. – cybersam

+0

111 находится в цикле. я хочу, когда закончим цикл, а затем напишу 222. Я редактировал свой код. – hahamed

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