首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点mysql中的阻塞行为

节点mysql中的阻塞行为
EN

Stack Overflow用户
提问于 2014-12-26 03:25:21
回答 2查看 3K关注 0票数 2

我正在使用node.js和node.js,我想了解以下内容:

代码语言:javascript
复制
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语句看起来是非阻塞的呢?

谢谢,费利克斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-26 03:42:45

使用异步;如下所示:

代码语言:javascript
复制
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);
      }
    });
}
票数 1
EN

Stack Overflow用户

发布于 2014-12-26 03:29:38

节点本身对于IO是非阻塞的,所以这样的查询不会阻塞。相反,您需要在查询完成时传递一个回调函数:

代码语言:javascript
复制
var queries = 0;
connection.query("INSERT INTO animals SET ?", {name: "tiger!"},
function (err) {
    // handle error?
    queries++;
    if (queries == 200) {
        // Last query has finished running
    }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27652526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档