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

我遇到了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');}
    );
    

    最佳答案

    您应该传递回调函数:

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

    08-07 11:43