2017-02-01 5 views
0

これは私の最初の質問ですので、正しく進めないと申し訳ありません。これが起こったら教えてください。forループの範囲外のインデックスですが、(間違った)作業

私は馬鹿げて簡単にループに夢中になっています。

変数resは、条件を満たすIDがJSON配列として保存されるSQLクエリの応答です。 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内部の一点-At 各反復を変更し、それ以外では常に2 -2 VAR = 0 IIの外にあります。 ii < = res.length-1;プログラムが実行されます。

誰かが私に何が間違っているのか、なぜ教えてもらえますか?ありがとうございました。

+0

「雑誌」とは何ですか? –

+1

コールバック関数が発生するまでにループが停止します。 Javascriptの "クロージャ"を読んでください。 –

答えて

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 
関連する問題