Javascript 如何设置等待socket.on事件的上限?

Javascript 如何设置等待socket.on事件的上限?,javascript,asynchronous,timer,socket.io,Javascript,Asynchronous,Timer,Socket.io,我触发了一个事件 socket.emit('release now'); 一段时间后可能会或可能不会触发另一个事件(取决于某些用户输入) 但我只想等待最长的时间,比如说,5秒。如果没有,那就继续做//无论如何都要做些事情(其他一些小事情也会改变) 如何使用setTimeout?,或者我应该首先使用它?因为我想不出如何让他们(socket.on(“…和seTimeout)彼此沟通……我不知道我是否理解你的意图,但我会试试看: var eventTimeout = setTimeout(funct

我触发了一个事件

socket.emit('release now');
一段时间后可能会或可能不会触发另一个事件(取决于某些用户输入)

但我只想等待最长的时间,比如说,5秒。如果没有,那就继续做
//无论如何都要做些事情
(其他一些小事情也会改变)


如何使用
setTimeout
?,或者我应该首先使用它?因为我想不出如何让他们(
socket.on(“…
seTimeout
)彼此沟通……

我不知道我是否理解你的意图,但我会试试看:

var eventTimeout = setTimeout(function{ /* timeout code here */}, 5000);
socket.emit('release now'); // emit fired and timer set

socket.on('released', function() {
   clearTimeout(eventTimeout); // cancel our timeout since we got released on time
   // do Stuff
});
那么

/* timeout code here */

如果释放的事件没有在5秒内发生,将触发。

很好。我忘记了
clearTimeout
存在此问题。但是仍然存在一个问题:如果
'released'
事件在
setTimeout
之后的几天仍然触发,那么
/*timeout code*/
///do Stuff
都将被执行。无论如何你可以使用另一个标志来确定你的超时代码是否已经触发。这种结构通常可以通过将你的应用程序重新设计为更“异步”来避免。你能给我指出一些我可以详细了解你的意思的地方吗?对于标志:
var released=false;
在你发布的处理程序中将其设置为true,然后在你的超时代码中检查它
/* timeout code here */