这是我在这里的第一个问题,如果我没有正确行事,那就很抱歉。告诉我这是否发生。
我为一个荒谬的简单循环而疯狂。
变量res
是sql查询的响应,其中满足条件的ID保存为JSON数组。 JSON.stringify(res)
返回[{"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
我很困惑,因为: - 在循环内的一个点ii改变每次迭代,但在另一个点总是2。 -2超出var ii = 0; ii&lt; = res.length-1;但程序运行了。
有人可以告诉我,我做错了什么,为什么?谢谢。
答案 0 :(得分:0)
广告你的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