【问题标题】:setInterval in loop nodejs循环nodejs中的setInterval
【发布时间】:2012-03-15 10:28:53
【问题描述】:

我知道还有其他类似的问题,但我的代码似乎不起作用。 你能看看我的代码并告诉我我错在哪里。

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

【问题讨论】:

  • 创建x 间隔似乎不是一个好的设计,而且还会同时执行。
  • 我认为到目前为止的答案是正确的,为什么它不起作用,但你为什么首先使用setInterval()? (每当我看到从循环内部调用setInterval() 时,我的脑海中就会响起警钟......)

标签: javascript node.js loops


【解决方案1】:

别忘了调用函数:

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

请注意,您的延迟可能与预期不同。目前,您将在 5 秒后执行所有方法。如果您希望每次调用之间有 5 秒的延迟,请创建一个队列。

【讨论】:

    【解决方案2】:

    您没有填充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); // <------------------
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2022-09-24
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2015-03-23
      相关资源
      最近更新 更多