Javascript:connection.query函数正在破坏我的for循环

Javascript: connection.query function is breaking my for loop

本文关键字:我的 for 循环 connection query 函数 Javascript      更新时间:2024-03-27

我在第一次(也是唯一一次)执行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);