我正在尝试使用套接字终止node.js中的长循环。
我使用socket.emit('eventName')从react中发出一个事件,服务器上有一个socket.on('eventName'),它最终会更新一个布尔标志并终止运行循环。
但是当我发出一个事件时,事件发出但不会在服务器端反射,因为循环仍在运行。
for(let i = 0; i < body.length; i++){
/**
Long Running loop which needs to be terminated based on socket event
**/
}
它在循环结束后终止或接受套接字的输入。但是我需要在循环执行时终止它。
[更新]
let booleanFlag = false //default value of flag
下面的函数将从socket.on('eventName')调用
function cancelAPIRequest(){
booleanFlag = true
}
这个for循环需要被终止,并将在每次迭代时检查变量“booleanFlag”的状态。
for(let i = 0; i < body.length; i++){
if(!booleanFlag){
// continues loop
}else{
return; // terminates loop
}
}
1条答案
按热度按时间ghhaqwfi1#
JavaScript引擎是单线程的,它一次执行同步循环,不给任何其他处理发生的机会,包括处理套接字事件(当然,它会在某个时候被处理,但是 * 在 * 同步循环结束之后)。
为了给你的事件给予一个机会来改变你的标志值,并且后者在循环中被拾取,你需要定期“暂停”那个循环,通常是通过引入一个dec操作,例如: