2014-02-26 39 views
3

我试图实现的目标是一个不间断地发送数据的客户端。我需要它无限期地运行。基本上是模拟器/测试类型的客户端。如何在同步循环内的Node.JS中使用setTimeout?

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

但我正在寻找的是:

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

应用。 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

也许你可以使用'setInterval'呢? – user2428118

回答

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');} 
); 
+1

谢谢!就是这样。该死的回调! :) – Nick

+0

谢谢!是的,回调。 – wazhao