Javascript:connection.query函数正在破坏我的for循环
Javascript: connection.query function is breaking my for loop
我在第一次(也是唯一一次)执行for循环时对值进行了注释。在连接之后,我做什么似乎并不重要。查询我的for循环总是得到一个逃离循环的值。不知道为什么。我可以提供更多的例子。有人知道可能发生了什么,以及我如何解决这个问题吗?以下是一段存在此问题的代码片段。我使用的node.js的mysql插件在这里
https://github.com/felixge/node-mysql
for (j=0;j<rows[i].movelimit;j++){
//j=0
sql2="SELECT x, y, land FROM map WHERE collision = 0 AND x>"+(lastX-55)+" AND x<"+(lastX+55)+" AND y>"+(lastY-55)+" AND y<"+(lastY+55)+" AND land='"+rows[i].land+"'"+restrictions;
connection.query(sql2, function(err, move, fields) {
//j=rows[i]movelimit
这似乎是一个异步回调。因此,您的循环变量j
不在回调函数的范围内,它将始终计算为循环结束前分配的最后一个值。另请参阅javascript中的循环意外行为或循环内的javascript闭包——一个简单的实用示例。
使用闭包:
function getCallbackFn(index) {
return function(err, move, fields) {
....
// "index" will always point to the function argument
};
}
for (j=0;j<rows[i].movelimit;j++) {
var sql2 = ...
connection.query(sql2, getCallbackFn(j));
}
更短的内联IEFE:
for (j=0;j<rows[i].movelimit;j++) (function(j){
var sql2 = ...
connection.query(sql2, function(err, move, fields) {
....
// "j" points to the function argument
});
})(j);
相关文章:
- 为什么我的“for”循环只获取 html 中的最后一项
- Javascript:connection.query函数正在破坏我的for循环
- 我的 for 循环有什么问题
- 我的 for 循环中的这些小数从何而来
- CasperJS只从我的for循环中多次发布最后一项
- 初学者JavaScript - 重新启动我的for循环
- 为什么我的 for 循环来一次
- 我的For循环计时不正确,是什么'It’他错了
- 我的for循环内输出分叉失败
- 为什么我的for循环在某些情况下没有启动?
- 我不明白我的for循环
- 为什么我的for循环只推入数组当循环没有括号
- javascript.当包含在函数中时,我的for循环在一次迭代后停止
- 按键排序数组或:为什么我的for循环执行无序
- 雄辩的Javascript, listToArray.为什么我的for循环返回rest [object]当输入数组有超过
- 为什么我的for循环不工作在我的JSON函数
- 我应该如何修复我的for循环代码求和范围
- 为什么我的for循环改变了jQuery中toggleClass的行为
- 事情在我的for循环完成之前就已经发生了(javascript)
- if语句在我的for循环中不起作用