2012-03-15 3 views
1

Я знаю, что есть другие вопросы, подобные этому, но мой код просто не работает. Не могли бы вы взглянуть на мой код и рассказать мне, где я ошибаюсь.setInterval in loop 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', которые в дополнении будут выполнены всеми в то же время. –

+2

Я думаю, что ответы до сих пор верны, почему это не работает, но почему вы используете 'setInterval()' в первую очередь? (Тревожные колокола исчезают у меня в голове, когда я вижу 'setInterval()' вызванный изнутри цикла ...) – nnnnnn

ответ

6

Не забудьте вызвать функцию:

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

Обратите внимание, что ваша задержка не может вести себя, как ожидалось. В настоящее время вы выполняете все методы через 5 секунд. Создайте очередь, если вы хотите иметь задержку в 5 секунд между каждым вызовом.

+0

@Jed, вы должны принять ответ Роба. – seppo0010

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); // <------------------