如何在 JavaScript 中实现与 C# 中的 lock
等价的东西?
所以,为了解释我的想法,一个简单的用例是:
用户点击按钮 B
。 B
引发 onclick 事件。如果 B
处于 event-state
,则事件在传播之前等待 B
处于 ready-state
。如果B
处于ready-state
,B
被锁定并设置为event-state
,则事件传播。当事件传播完成时,B
设置为 ready-state
。
我可以看到如何完成类似的事情,只需在按钮中添加和删除类 ready-state
即可。然而,问题在于用户可以连续两次单击按钮的速度比设置变量的速度快,因此这种锁定尝试在某些情况下会失败。
有谁知道如何在 JavaScript 中实现不会失败的锁?
最佳答案
Lock 是 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 事件监听器或发布订阅解决方案来实现这一点。
关于javascript - 如何在 JavaScript 中实现锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346694/