我试图从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
答案 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