索引循环不会改变

时间:2015-10-19 18:13:54

标签: javascript node.js twitter

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

无法弄清楚如何解决它。

再次询问,在过去3小时内没有运气使这个脚本有效。被指出for loop does not change index inside function。有人可以帮我解决这个问题吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是因为javascript中的闭包。

This回答应该有助于解释它,并且有几种方法可以解决它。

最简单的使用.forEach()

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