如何使用JavaScript控制数据库查询的响应顺序
How to control the response order of a database query with JavaScript
我有两个嵌套的数据库查询:
db.query(query1, function (err, rows, fields) {
if (!err) {
console.log("outer rows.length: " + rows.length);
function outer() {
for (var i = 0; i < rows.length; i++) {
console.log(i + ". outer row");
function inner() {
db.query(query2 + i + 1, function (error, r, f) {
if (!error) {
for (var j = 0; j < r.length; j++) {
console.log(j + ". inner row");
}
}
});
};
inner();
}
}
outer();
}
});
我希望日志订单是…
outer rows.length: 2
0. outer row
0. inner row
1. inner row
1. outer row
0. inner row
然而,我得到了这个结果:
outer rows.length: 2
0. outer row
1. outer row
0. inner row
1. inner row
0. inner row
存在两个属于0. outer row
的内部行和一个属于1. outer row
的内部行。此代码首先记录所有外部行,然后记录所有内部行。
我正在寻找防止这种情况发生的方法。我认为,问题在于代码的异步性。我试图通过将function inner()
放入样式为( function inner() { .. } )();
的立即调用函数来修复它,但这并没有改变任何内容。我如何确定每一个内部行将在其对应的外部行之后记录,就像在第一个列表中一样?如有任何建议,我们将不胜感激。
编辑:
它是Node.js中使用Node-mysql模块的服务器端JavaScript。
这肯定是NodeJS的异步功能。影响您的代码时,您需要在查询中创建一个回调,然后在查询完成后输出响应,如果您希望异步(您可能会这样做)
NodeJS网站上有关于如何使用回调进行ansychroneous调用的很好的例子。
这里有一个例子:
function formSubmit(submitEvent) {
var name = document.querySelector('input').value
request({
uri: "http://example.com/upload",
body: name,
method: "POST"
}, postResponse)
}
function postResponse(err, response, body) {
var statusMessage = document.querySelector('.status')
if (err) return statusMessage.value = err
statusMessage.value = body
}
exports.submit = formSubmit
相关文章:
- 在C#Web响应上应用DOM查询
- 如何使用JavaScript控制数据库查询的响应顺序
- 通过 AJAX 调用 PHP 文件,将 $_GET 变量传递到 MySQL 查询中,然后回显到响应中
- 如何将垂直选项卡式内容面板更改为具有媒体查询和 jquery 的响应式可折叠面板
- 使用基于ajax响应的查询切换类
- 使用显示的响应式导航栏:无仍然显示,即使它旨在显示何时使用媒体查询调整屏幕大小
- 我的一个媒体查询没有响应
- 在猫鼬查询返回集合之前,应用程序应该如何处理 http get 响应
- Solr 和 AJAX 正确设置响应查询
- JSON 响应未根据 SQL 查询正确排序
- 响应.js将首选媒体查询而不是稍后定义的全局选择器
- IE8 支持使用响应.js进行媒体查询
- 节点JS-异步-响应是在执行查询时发送的
- Javascript自定义函数,用于将JSON格式的YQL查询响应导入谷歌电子表格
- 有没有一种方法可以在调用诺基亚反向地理编码api时将响应和查询关联起来
- 响应式HTML5视频标签,多个查询
- MEAN数据库查询中的响应为空
- 正在添加'淡出/淡入'响应媒体查询
- 如何在查询响应中处理302重定向
- 来自Parse.com的Javascript查询响应