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