我正在使用node.js和node.js,我想了解以下内容:
connection.connect(function(err) { if (err) throw err; });
console.log(" beginn insert "+ Date() );
for (var i=0;i<200;i++){
connection.query('INSERT INTO animals SET ?', {name: "tiger!"});
}
connection.end();
console.log(" end insert " + Date() );输出总是‘开始插入’,紧接着是‘end插入’,然后只有数据库才开始工作。怎么可能这些节点-mysql语句看起来是非阻塞的呢?
谢谢,费利克斯
发布于 2014-12-26 03:42:45
使用异步;如下所示:
console.log(" beginning insert "+ Date() );
// create your queries as an array of objects
queries = [];
for (var i=0;i<200;i++){
queries.push({name: "tiger!"});
};
async.map(queries, myQuery, function(err, data){
// Here all of your queries are done
connection.end();
console.log(" end insert " + Date() );
});
function myQuery(name, callback){
connection.query('INSERT INTO animals SET ?', [name], function(err, result) {
if(err){
console.error(err);
callback(err, null);
}else{
callback(null, result);
}
});
}发布于 2014-12-26 03:29:38
节点本身对于IO是非阻塞的,所以这样的查询不会阻塞。相反,您需要在查询完成时传递一个回调函数:
var queries = 0;
connection.query("INSERT INTO animals SET ?", {name: "tiger!"},
function (err) {
// handle error?
queries++;
if (queries == 200) {
// Last query has finished running
}
});https://stackoverflow.com/questions/27652526
复制相似问题