关于javascript:索引循环不会改变

Index loop does not change

本问题已经有最佳答案,请猛点这里访问。

我正在尝试从Twitter上收集推文,在控制台上如果我选择5条推文来收集它显示它们中的每一条但是如果我选择mysql模块将它们插入到数据库中它会插入最后一行5次。

无法弄清楚如何解决它。

再问一遍,在过去的3个小时内没有运气使这个脚本有效。 指出for循环不改变函数内的索引。 有人可以帮我解决这个问题吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (var i = 0; i < data.length ; i++) { // get all the messages from username, devfined in search term
  var retweetId_str = data[i].id_str; // id_str = id not rounded more precise
  console.log('id_str:', retweetId_str); //

 //id_str: 656087507604402176
 //id_str: 656063345192255488
 //id_str: 656063056947126272
 //id_str: 656062911530606592
 //id_str: 656062750574182400    
  con.query('SELECT retweetid_str FROM droid_retweets WHERE retweetId_str=?', retweetId_str, function(error,result){
    console.log('id_str:', retweetId_str);        

    //id_str: 656062750574182400
    //id_str: 656062750574182400
    //id_str: 656062750574182400
    //id_str: 656062750574182400
    //id_str: 656062750574182400
  });
} // for close


这是因为javascript中的闭包。

这个答案应该有助于解释它,并有几种方法来处理它。

最容易使用.forEach()

1
2
3
4
5
6
7
8
9
10
data.forEach(function(d) { // get all the messages from username, devfined in search term

            var retweetId_str = d.id_str; // id_str = id not rounded more precise
            console.log('id_str:', retweetId_str); //
           con.query('SELECT retweetid_str FROM droid_retweets WHERE retweetId_str=?', retweetId_str, function(error,result){
           console.log('id_str:', retweetId_str);        

          });

    }); // for close


这是因为for循环在从con.query获得响应之前执行了所有迭代,这就是为什么它多次打印最后一个,因为索引位于最后位置