Node.js setTimeout未按预期运行?

Node.js setTimeout未按预期运行?,node.js,azure,dom-events,settimeout,setinterval,Node.js,Azure,Dom Events,Settimeout,Setinterval,我正在使用socket.io连续地从服务器向客户端发送一些数据。因此,我使用setTimeout函数定期发送数据,并且睡眠时间不是恒定的,因此我没有使用setInterval,但是setTimeout不起作用。我使用服务总线从我的工作者角色获取一些数据,这些数据定期转发给客户端。这是我的密码: var sleepTime; function requestQueue() { sleepTime = 0; console.log("REQUEST QUEUE STARTED&quo

我正在使用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);
}
////

我基本上是一名C#程序员,对JS非常陌生。如果我的
setTimeout
实现错误,请告诉我。本质上,我希望使用可变的睡眠时间周期性地调用
requestQueue
方法

编辑答案:


就我而言,这是一个愚蠢的问题。我使用的睡眠时间是秒而不是毫秒<代码>设置超时需要毫秒。我之所以选择Scott作为答案,是因为我认为异步模块非常有用,可以替代
setTimeout
和许多其他功能(如果需要)。

看起来您可以从应用程序中的一些控制流中获益

看看异步模块。它是直接的,将消除使用setTimeout的需要


看起来您可以从应用程序中的一些控制流中获益

看看异步模块。它是直接的,将消除使用setTimeout的需要


太好了!看起来我可以利用这个,你知道我需要用什么函数来复制setTimeout行为吗?等等!假设我使用异步模块中的“永远”或“同时”中的任何一个,那么我的执行控制就会卡在其中,对吗?我的意思是客户端将向套接字发出请求,因此我不希望这些请求被暂停,因为执行控制卡在“ForServer”方法中。我将使用队列对象:队列(工作者,并发性)创建具有指定并发性的队列对象。添加到队列中的任务将并行处理(达到并发限制)。如果所有工作进程都在进行中,则任务将排队,直到有一个可用。工作人员完成任务后,将调用该任务的回调。太棒了!看起来我可以利用这个,你知道我需要用什么函数来复制setTimeout行为吗?等等!假设我使用异步模块中的“永远”或“同时”中的任何一个,那么我的执行控制就会卡在其中,对吗?我的意思是客户端将向套接字发出请求,因此我不希望这些请求被暂停,因为执行控制卡在“ForServer”方法中。我将使用队列对象:队列(工作者,并发性)创建具有指定并发性的队列对象。添加到队列中的任务将并行处理(达到并发限制)。如果所有工作进程都在进行中,则任务将排队,直到有一个可用。工作进程完成任务后,将调用该任务的回调。
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);
    }
})

}