如何在JavaScript中实现与C#中的lock
等效的东西?
所以,为了解释我的想法,一个简单的用例是:
用户单击按钮B
。B
会引发一个onclick事件。如果B
在event-state
中,则事件在传播之前等待B
在ready-state
中。如果B
在ready-state
中,则B
被锁定并设置为event-state
,则事件将传播。当事件的传播完成时,B
被设置为ready-state
。
我可以看到如何通过添加和删除按钮中的ready-state
类来完成类似的操作。然而,问题是用户可以连续单击按钮两次,速度比设置变量的速度要快,因此在某些情况下尝试锁定将会失败。
有人知道如何在JavaScript中实现一个不会失败的锁吗?
发布于 2011-03-18 09:17:58
在JS中,锁是一个值得怀疑的想法,它旨在成为无线程的,并且不需要并发保护。您希望组合延迟执行上的调用。我遵循的模式是使用回调。如下所示:
var functionLock = false;
var functionCallbacks = [];
var lockingFunction = function (callback) {
if (functionLock) {
functionCallbacks.push(callback);
} else {
$.longRunning(function(response) {
while(functionCallbacks.length){
var thisCallback = functionCallbacks.pop();
thisCallback(response);
}
});
}
}
您也可以使用DOM事件侦听器或pubsub解决方案来实现这一点。
发布于 2016-12-25 00:31:55
我已经成功了,mutex-promise。
我同意其他答案,即在您的案例中可能不需要锁定。但这并不是说在Javascript中永远不需要锁定。在访问不处理并发的外部资源时,您需要互斥。
发布于 2011-06-08 22:54:44
锁是多线程系统中需要的一个概念。即使使用工作线程,消息也是按值在工作线程之间发送的,因此不需要锁定。
我怀疑你只需要在你的按钮之间设置一个信号量(标志系统)。
https://stackoverflow.com/questions/5346694
复制相似问题