2012-06-09 21 views
0

我从Node.js使用Javascript MYSQL库,然后我有多个查询运行循环。但是当我运行循环时,the loop总是会在它开始的查询仍在处理时突然结束(完成)。那么如何让循环等待每个查询直到完成,然后继续正常?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方法的同步版本的文档,或者您需要创建一个回调以在所有插入操作后打印结束消息。

相关问题