Mik*_* S. 7 javascript synchronization javascript-events
我有一个函数,它是一个事件处理程序websocket.onmessage,因为服务器可以发送多个消息(一个接一个),每个消息将触发该事件,并且因为功能块可能需要几秒钟(内部进行大量渲染) ),当第一个函数调用仍在运行时,可以再次调用该函数.在某些情况下,我需要在此函数中使用一个关键块,以便第二次调用仅在第一次调用结束时启动关键部分,这被认为是在JavaScript中实现锁定的"最佳实践"?
由于js是单线程的,所以不能真正做锁。嗯,你可以,但你不应该。
一种想法可能是保留状态变量。
您的函数将在每个 onmessage 上调用,但只有当变量设置为 false 时您才会执行某些操作。如果是这样,请将其设置为 true,完成后将其设置回 false。
var handler; //expose outside the closure
(function(){
var busy = false;
handler = function(){
if( !busy ){
busy = true;
//do rendering stuff
busy = false;
}
}
})();
Run Code Online (Sandbox Code Playgroud)
显然,请根据您自己的需要调整这个想法。
| 归档时间: |
|
| 查看次数: |
9050 次 |
| 最近记录: |