Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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
Javascript 索引超出for循环的界限,但(错误)正在工作_Javascript_Arrays_Json_For Loop - Fatal编程技术网

Javascript 索引超出for循环的界限,但(错误)正在工作

Javascript 索引超出for循环的界限,但(错误)正在工作,javascript,arrays,json,for-loop,Javascript,Arrays,Json,For Loop,这是我在这里的第一个问题,如果我没有正确进行,很抱歉。如果发生这种情况,请告诉我 我被一个可笑的简单循环弄疯了 变量res是sql查询的响应,其中满足条件的ID保存为JSON数组

这是我在这里的第一个问题,如果我没有正确进行,很抱歉。如果发生这种情况,请告诉我

我被一个可笑的简单循环弄疯了

变量
res
是sql查询的响应,其中满足条件的ID保存为JSON数组返回
[{“id”:1},{“id”:2}]
。代码如下:

    for(var ii = 0; ii <= res.length-1; ii++){
        console.log("res[ii].id: "+res[ii].id); //throws the correct message on console, so ii=1 first and later ii=2.

        laDatabase.all("SELECT * FROM Movies WHERE Movies.id="+res[ii].id+";", function(err, resMovies){
            console.log("resMovies: "+JSON.stringify(resMovies)); //throws the correct message on console, the sql sentence is correct and runs without problem
            if(err){
                console.log("Error en 'SELECT * FROM Movies WHERE Movies.id="+res[ii].id+";'");
                return;
            }else{
                //I tried to move the response of the sql query to the array I'll return. At this point, ii=2 always
                console.log("ii: "+ii);
                jsonArrayRespuesta[ii] = resMovies[0];
                console.log("jsonArrayRespuesta: "+JSON.stringify(jsonArrayRespuesta));//resMovies[0] is saved in jsonArrayRespuesta[2] both times
                console.log("length of jsonArrayRespuesta: "+jsonArrayRespuesta.length);//this shows 3, obviously...
            }//if-else
        });//Movies
    }//for

for(var ii=0;iiAd)sql查询的结果出现,调用了回调,for循环已经运行完毕,ii的值达到(res.length-1)

您可以使用clousere来解决这个问题

for(var ii = 0; ii <= res.length-1; ii++){
    console.log("res[ii].id: "+res[ii].id); //throws the correct message on console, so ii=1 first and later ii=2.

    (function(res,ii){
    laDatabase.all("SELECT * FROM Movies WHERE Movies.id="+res[ii].id+";", function(err, resMovies){
        console.log("resMovies: "+JSON.stringify(resMovies)); //throws the correct message on console, the sql sentence is correct and runs without problem
        if(err){
            console.log("Error en 'SELECT * FROM Movies WHERE Movies.id="+res[ii].id+";'");
            return;
        }else{
            //I tried to move the response of the sql query to the array I'll return. At this point, ii=2 always
            console.log("ii: "+ii);
            jsonArrayRespuesta[ii] = resMovies[0];
            console.log("jsonArrayRespuesta: "+JSON.stringify(jsonArrayRespuesta));//resMovies[0] is saved in jsonArrayRespuesta[2] both times
            console.log("length of jsonArrayRespuesta: "+jsonArrayRespuesta.length);//this shows 3, obviously...
        }//if-else
    });//Movies
 })(res,ii);

}//for

for(var ii=0;ii什么是“bucle”?当回调函数出现时,循环停止运行。请阅读Javascript中的“closures”。