如何在同步循环中的Node.JS中使用setTimeout?

时间:2014-02-26 15:08:46

标签: javascript node.js

我想要实现的目标是不断按时间间隔发送数据的客户端。我需要它无限期地运行。基本上是模拟器/测试类型的客户端。

我遇到了setTimeout的问题,因为它是一个在同步循环中调用的异步函数。结果是data.json文件中的所有条目都同时输出。

但我正在寻找的是:

  • 输出数据
  • 等待10秒
  • 输出数据
  • 等待10秒
  • ...

app.js:

var async = require('async');

var jsonfile = require('./data.json');

function sendDataAndWait (data) {
    setTimeout(function() {
        console.log(data);
        //other code
    }, 10000);
}

// I want this to run indefinitely, hence the async.whilst
async.whilst(
    function () { return true; },
    function (callback) {
        async.eachSeries(jsonfile.data, function (item, callback) {
            sendDataAndWait(item);
            callback();
        }), function(err) {};
        setTimeout(callback, 30000);
    },
    function(err) {console.log('execution finished');}
);

1 个答案:

答案 0 :(得分:2)

您应该传递回调函数:

function sendDataAndWait (data, callback) {
    setTimeout(function() {
       console.log(data);
       callback();
       //other code
    }, 10000);
}

// I want this to run indefinitely, hence the async.whilst
async.whilst(
    function () { return true; },
    function (callback) {
       async.eachSeries(jsonfile.data, function (item, callback) {
           sendDataAndWait(item, callback);
       }), function(err) {};
      // setTimeout(callback, 30000);
    },
    function(err) {console.log('execution finished');}
);