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中的闭包。
这个答案应该有助于解释它,并有几种方法来处理它。
最容易使用
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获得响应之前执行了所有迭代,这就是为什么它多次打印最后一个,因为索引位于最后位置