2012-03-15 126 views
1

我知道,還有其他問題,只是這樣的,但我的代碼只是不似乎工作。 你能看看我的代碼,並告訴我我錯在哪裏。的setInterval循環中的NodeJS

var mysql = require('mysql'); 

var client = mysql.createClient({ 
    user: 'jed', 
    password: 'jed8703', 
    host: 'localhost', 
    database: 'jedtest' 
}); 

//var query = client.query(
// 'INSERT INTO testtable '+ 
// 'SET testid = ?, name = ?, value = ?', 
// [1, 'test', 'test'] 
//); 


client.query(
    'SELECT * FROM testtable', 
    function selectCb(err, results, fields) { 
    if (err) { 
     throw err; 
    } 

    console.log(results[0].Name); 
    for(var i in results) 
     { 
      (function(y) 
      { 
       setInterval(function() { 
        console.log(results[y].Name + 'value:' + results[y].Value); 
       }, 5000); 
      }) 
     } 
    } 
); 

client.end(); 
+0

它似乎並不好設計創造'這除了將所有執行x'間隔與此同時。 – 2012-03-15 10:35:22

+2

我認爲到目前爲止的答案是正確的,爲什麼它不工作,但爲什麼你使用'的setInterval()'擺在首位? (警鐘響在我的腦海,每當我看到一個循環內'的setInterval()'叫...) – nnnnnn 2012-03-15 10:35:36

回答

6

不要忘了調用該函數:

 (function(y) 
     { 
      setInterval(function() { 
       console.log(results[y].Name + 'value:' + results[y].Value); 
      }, 5000); 
     })(i); // <------- Added (i); 

注意,按照預期的延遲可能無法正常使用。目前,您在5秒後執行所有方法。如果要在每次通話之間延遲5秒,請創建一個隊列。

+0

@Jed你應該接受羅布的回答。 – seppo0010 2012-03-15 10:53:52

2

你是不是fullfilling y變量,嘗試更換:

(function(y) 
    { 
     setInterval(function() { 
     console.log(results[y].Name + 'value:' + results[y].Value); 
     }, 5000); 
    }) 

有了:

(function(y) 
    { 
     setInterval(function() { 
     console.log(results[y].Name + 'value:' + results[y].Value); 
     }, 5000); 
    })(i); // <------------------