setTimeout无法正常工作?

时间:2013-04-03 11:48:50

标签: node.js javascript-events azure settimeout setinterval

我正在使用socket.io从服务器到客户端连续发送一些数据。所以我使用setTimeout函数定期发送数据。睡眠时间不是恒定的,所以我没有使用setInterval。但是setTimeout不起作用。我正在使用服务总线从我的工作者角色获取一些数据,这些数据会定期转发给客户端。这是我的代码。

var sleepTime;

function requestQueue() {

sleepTime = 0;

console.log("REQUEST QUEUE STARTED");

console.log("SEND to WORKER ROLE");
// send the request to worker role
var broadcastMessage = {}
broadcastMessage.Channel = "World";
broadcastMessage.BufferSize = 10;     

sendMessage(socketToWorkerRole, broadcastMessage)

receivePeriodicRecordsQueue(workerRoleToSocket);
}

////

function receivePeriodicRecordsQueue(queue) {

serviceBusService.receiveQueueMessage(queue, function (error, receivedMessage) {
    if (!error) {
        if (receivedMessage != null) {
            var messageBody = receivedMessage.body;

            if (messageBody != null) {

                // Lots of processing and calculating sleep time

                    // SET TIMEOUT
                    if (sleepTime != 0) {
                        console.log("SLEEP TIME:" + sleepTime);
                        setTimeout(function () { requestQueue(); }, sleepTime);
                    }

                      // sending data to client through socket
                    io.sockets.emit('broadcast', recordsQueue);

                }

            }
        }
    }
    else {
        console.log(error);
    }
})

}

基本上是一个C#程序员,对JS来说很新。如果我的setTimeout实现错误,请告诉我。基本上我希望使用变量睡眠时间定期调用requestQueue方法

编辑答案:

就我而言,这是一个愚蠢的问题。我用的是几秒钟而不是几毫秒的睡眠时间。 setTimeout需要毫秒。但我已经将scott标记为答案,因为我认为异步模块非常有用,可以用作setTimeout的替代品以及许多其他功能(如果需要)。

1 个答案:

答案 0 :(得分:1)

看起来您可以从应用中的某些控制流中受益。

看一下异步模块。它很简单,不需要使用setTimeout。

https://github.com/caolan/async