2012-06-09 2 views
0

Я использую Javascript MYSQL Library от Node.js, а затем у меня есть несколько запросов для запуска в цикле. Но когда я запускаю цикл, the loop всегда доходит до конца (сделано) внезапно, а запущенные запросы все еще обрабатываются. Итак, как мне сохранить цикл, чтобы каждый Query выполнил, а затем продолжить нормально?Node.js MYSQL для выполнения каждого запроса последовательно после предыдущего?

Мой код:

function startHere() { 
    console.log("-- START --"); 
    for (i=1; i < 6; i++) { 
     dbInsert(i); 
    } 
    console.log("-- END --"); 
} 
function dbInsert(id) { 
    connection.query (
     'INSERT INTO table SET data=?', 
     [id], 
     function selectCb(err, results, fields) { 
      if (err) { 
       console.log(err.message); 
      } 
      if (results.length > 0) { 
       console.log(id+" RECORDS ADDED!"); 
      } 
     } 
    ); 
} 
startHere(); 

Когда я бегу, он всегда возвращается, как:

-- START -- 
-- END -- 
1 RECORDS ADDED! 
2 RECORDS ADDED! 
3 RECORDS ADDED! 
4 RECORDS ADDED! 
5 RECORDS ADDED! 

Это означает, что цикл не ждать конца запросов, которые он начал.
Как я могу определить конечную точку запросов и заставить их работать?

+0

Я думаю, что это дублирование этого: http://stackoverflow.com/questions/6638646/synchronous-mysql-in-node- js – xiaoyi

+1

Во-первых, ознакомьтесь с тем, что означает 'асинхронный' (Google - ваш друг на этом). Во-вторых, проверьте [эту страницу] (https://github.com/caolan/async). – elmigranto

ответ

0

Ваш метод selectCb не называется синхронно, поэтому ваш цикл эффективно отключает каждый вызов, а затем возвращается.

Вы можете либо проверить документы для синхронной версии этого метода connection.query, либо создать обратный вызов для печати конечного сообщения после того, как все ваши вставки были запущены.

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