Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sequelize阻止其他用户对mysql进行Nodejs和异步调用_Mysql_Node.js_Asynchronous - Fatal编程技术网

使用sequelize阻止其他用户对mysql进行Nodejs和异步调用

使用sequelize阻止其他用户对mysql进行Nodejs和异步调用,mysql,node.js,asynchronous,Mysql,Node.js,Asynchronous,这是我在这里的第一篇文章,我希望我做得对。 我学习nodejs是为了一个我想做的项目,我使用node编写一个web服务。我遵循了一个教程,获得了一个工作的web服务,但我必须自己编写连接到db的部分。问题是,它返回数据,但也会阻塞其他所有内容。 如果查询1需要20秒,查询2只需要3秒,我先调用查询1,然后调用查询2,那么查询2只会在查询1完成后显示,阻止所有潜在用户! 这是我的代码的一部分,如果你需要更多,尽管问 这是一个请求处理程序,最后两个参数用于测试 function start(resp

这是我在这里的第一篇文章,我希望我做得对。 我学习nodejs是为了一个我想做的项目,我使用node编写一个web服务。我遵循了一个教程,获得了一个工作的web服务,但我必须自己编写连接到db的部分。问题是,它返回数据,但也会阻塞其他所有内容。 如果查询1需要20秒,查询2只需要3秒,我先调用查询1,然后调用查询2,那么查询2只会在查询1完成后显示,阻止所有潜在用户! 这是我的代码的一部分,如果你需要更多,尽管问

这是一个请求处理程序,最后两个参数用于测试

function start(response){
        console.log("Request handler 'insertHood' was called.");
        response.writeHead(200, {"Content-Type": "text/html"});
        var result = db.execute('select x(country_location), y(country_location), country_name, zoom_level from country', response, "Query 1 ", 10);
    }
这是database.js文件中的函数

function execute(query, response, msg, sleepz) {
  var result = sequelize.query(query)
  .success(function(rows)
    {
      sleep(sleepz);
      response.write(msg + JSON.stringify(rows));
      console.log(msg + (new Date()));
      response.end();
    }
  ).error(function(e) {
      console.log("An error occured", e);
      response.write("there was an error man, yo yoy oy");
      response.end();
    }
  );
}

我理解.success和.error都是回调函数,但我似乎找不到使它们异步的方法,我读过一篇关于异步库的文章,但我认为它不能满足我的需要,我确信我做错了什么,是什么?

你的
睡眠
函数是你出现问题的原因

在节点中创建忙等待循环时,可以有效地停止节点处理任何I/O的能力,如接受新连接、读取/写入文件、查询数据库等

如果要延迟发送回响应,则需要异步解决方案。幸运的是,有:


sleep(sleepz)
看起来有点可疑……这是我创建的一个函数,用于使查询花费更多的时间函数sleep(毫秒){var startTime=new Date().getTime();while(new Date().getTime()sleep()
函数阻塞了系统。这很有效!感谢所有帮助过我的人。那么,我怎么知道我所做的不会影响节点中的循环呢?@Toddy可能有助于理解节点事件循环。它甚至使用类似于
sleep
函数的东西来解释这种方法的问题。
.success(function(rows) {
  setTimeout(function() {
    response.write(msg + JSON.stringify(rows));
    console.log(msg + (new Date()));
    response.end();
  }, sleepz); // milliseconds
})