【发布时间】:2013-04-03 11:48:50
【问题描述】:
我正在使用 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 标记为答案,因为我认为 async 模块非常有用,可以用作 setTimeout 的替代品,如果需要,还可以用作许多其他功能。
【问题讨论】:
标签: node.js azure dom-events settimeout setinterval