2012-03-15 123 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); // <------------------