怎么可能相当于lock
在 C# 中可以用 JavaScript 实现吗?
因此,为了解释我的想法,一个简单的用例是:
用户点击按钮B
. B
引发 onclick 事件。如果B
is in event-state
该事件正在等待B
将在ready-state
在传播之前。如果B
is in ready-state
, B
已锁定并设置为event-state
,然后事件传播。当事件传播完成时,B
被设定为ready-state
.
我可以看到如何通过添加和删除类来完成类似的事情ready-state
从按钮。然而,问题是用户连续两次单击按钮的速度比设置变量的速度快,因此这种锁定尝试在某些情况下会失败。
有谁知道如何在JavaScript中实现一个不会失败的锁?
锁在 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 解决方案来实现此目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)