2015-10-19 52 views
1

我試圖從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

檢查文檔,查詢可能是一個異步方法,以便通過查詢運行時間,retweetId_str總是656062750574182400 – juvian

回答

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 
+0

這不是因爲關閉。這是因爲變量的範圍如何。 – 2015-10-19 18:23:27

+0

最後一個有效的例子。非常感謝你。你不知道我有多感激。 –

+0

我將在4分鐘內添加此答案,再次感謝 –

1

這是因爲你從con.query響應之前的循環已經執行的所有迭代,這就是爲什麼它打印的最後一個好幾次,因爲該指數處於最後的位置

+0

我也明白,但我不知道該怎麼在我的例子中實現 –