如何在 JavaScript 中实现锁

2023-12-22

怎么可能相当于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(使用前将#替换为@)

如何在 JavaScript 中实现锁 的相关文章

  • 如何等待第一次画布重绘,直到 @font-face-font 加载?

    我有一个 HTML5 画布并用它编写文本context fillText 使用 font face font 使用 Firefox 3 6 显示页面我遇到问题 在画布的第一次绘制上 字体尚未下载 因此文本将以标准字体显示 我找到了一个 解决
  • JavaScript(或 jQuery)中有“有焦点”吗?

    我可以这样做吗 也许通过插件 if form contact input hasFocus form contact input first focus 基本上 将焦点设置为第一个输入 但前提是用户尚未单击任何内容 我知道这也行 但是还有更
  • 尝试制作Linux终端但失败

    这可能是一个愚蠢的问题 可能很容易找到 但我对这一切都很陌生 我似乎找不到我要找的东西 或者至少我不知道我需要寻找什么 所以我在这里 所以我想做的是创建一种 Linux 终端 这就是我到目前为止所得到的 我所坚持的是实际输入文本部分 我一直
  • 图表外的 JQPlot 图例

    我正在使用 JQPlot 并且在一个 HTML 页面上有很多图表 每个图表都有相同的图例 我的问题是 是否可以完全在图表之外显示图例 并在 HTML 页面或自己的 div 中拥有自己的位置 legend show true renderer
  • 如何在 HTML 链接中使用 JavaScript 变量

    我正在开发的网站有一个标签指向与网站所具有的 URL 不同的 URL 我想做的是绕过使用下面的 trueURL 标记来查找网页的网址 因为我需要它来构造一些内部锚点 因为我需要网站的实际网址 以便内部锚点正常工作 我遇到的问题是我不知道应该
  • 将全局样式表与故事书和角度结合使用 - SassError:SassError:预期“{”

    几天来 我一直在尝试将全局样式表集成到故事书中 我已经从 sass 支持文档中集成了 webpackFinal 配置 在 storybook 目录中 我创建了一个 scss loader scss 文件 该文件应该加载全局样式表 在 pre
  • scrollTop 在 Chrome 中不起作用,建议的解决方法也不起作用

    许多其他问题 here https stackoverflow com questions 2544979 is there a problem with scrolltop in chrome here https stackoverfl
  • 隐藏加载失败的图片

    我有一个 Android 应用程序 它生成一些在本地 Webkit 视图中呈现的 HTML HTML 生成的细节实际上并不那么重要 除了 大部分来自一个地方 我无法改变它 HTML 周围的模板 包括页眉 页脚 HEAD 等 CSS 和 Ja
  • Javascript:一般访问函数参数

    这是我所拥有的 var log function arg1 arg2 console log inside arg1 arg2 var wrap function fn return function args console log be
  • 如何在react中监听localstorage值的变化?

    我想在用户登录时显示一个按钮 如果用户未登录 那么我不会显示按钮 当用户登录时 我将设置本地存储值 当我在登录组件中设置本地存储时 标头组件必须侦听该事件并且显示按钮 我正在使用 addEventListener 进行监听 但它没有监听 我
  • JavaScript switch 语句是线性的还是恒定时间的?

    我的网站上有以下 JavaScript 以便在执行某些特定搜索时 答案会被硬编码到特定页面 function redirect var input document getElementById searchBox value toLowe
  • Javascript 搜索并替换包含方括号的字符序列

    我正在尝试在字符串 Nationality EN ESP 中搜索 EN 我想从字符串中删除它 所以我使用替换方法 代码示例如下 var str Nationality EN ESP var find EN var regex new Reg
  • 如何更改 angularjs $http.jsonp 的标头

    我读了document http docs angularjs org api ng 24http 但我想我一定是误解了 http defaults headers jsonp Accept application json http js
  • 如何将多种语言设置放入单个 .clang-format 文件中

    我想为 java javascript 和 c 创建一个 clang 格式 我知道如何转储单一语言的示例配置 但不知道如何合并这 3 个配置文件 有关如何将多种语言配置放入单个文件中的示例 BasedOnStyle LLVM IndentW
  • 是否有跨浏览器的 jQuery contentEditable 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 jQuery 插件 库 它可以使 contentEditable 属性在所有主要浏览器中正常工作 我什至可以不用 IE6
  • 用角度js中的字母过滤列表

    我在表格中显示了一个列表 我需要使用名称的第一个字母来过滤结果 在列表上方我有一个字母 A B C D 等等 单击后 字母列表将按名字过滤 例如 列表详细信息是Apple Boy Bridge点击后A Apple将显示 我必须过滤国家名称以
  • 如何根据父网格的标题复选框选择/取消选择所有子复选框

    我正在开发一个 Web 应用程序 其中包含嵌套在另一个数据网格中的数据网格 在父网格中 我在标题模板中有一个复选框 在子网格中的项目模板中有另一个复选框 功能是 1 如果我单击父复选框 则应检查子网格中的所有项目 反之亦然 2 我的子网格中
  • Google Calendar API:获取指定日期的空闲时段列表

    我需要获取我的谷歌日历中的免费时段列表 现在我只是获取事件列表 我在用谷歌日历 https www npmjs com package google calendar npm google calendar events list calO
  • ajaxStart() 仅调用一次,但 ajaxComplete() 调用多次

    我想对页面上的每个 AJAX 请求进行调用 I read here http docs jquery com Ajax Events that ajaxStart 全局事件 如果启动 Ajax 请求并且当前没有其他 Ajax 请求正在运行
  • 返回语句后的声明

    function f return f1 function f1 return 5 f returns 5 为什么这有效 之后声明局部函数有什么好处return 这是好的做法吗 它之所以有效 是因为函数声明都是由解释器在第一次传递时评估的

随机推荐

  • shuffle阶段和combiner阶段有什么区别?

    我对 MapReduce 框架很困惑 我从不同的来源读到了这方面的内容 感到很困惑 顺便说一句 这是我对 MapReduce 作业的想法 1 Map gt emit
  • SQL:查询的默认排序依据是什么?

    没有时查询的默认顺序是什么ORDER BY用来 不存在这样的命令 取自没有 ORDER BY 子句的 SELECTS 的默认排序顺序是什么 http forums mysql com read php 21 239471 239688 ms
  • 如何使 waitForWebPageToLoad 在编码的 ui 测试中工作?

    首先 我是编码 ui 测试的初学者 我的代码技能很差 但我正在努力学习 现在我正在 Visual Studio 中手工编写一些测试用例 C 记录选项对我来说还不够 但我无法得到waitForWebPageToLoad上班 例如下面的例子 我
  • 在 ViewPager 滑动时显示/隐藏 FloatingActionButton

    我的活动有 3 个选项卡 每个选项卡页面都是一个显示 RecyclerView 的片段 其中一个片段中有 FloatingActionButton 我正在片段的布局中实现此按钮 我还在片段的右下角将其设为静态 片段布局 Coordinato
  • 使用八度无头

    是否有可能使用 Octave 无头 像这样的东西 octave lt 5 4 gt result txt Using octave silent eval 5 4 gt result txt 你会得到 ans 9 in result txt
  • 是否可以在CSS中设置img标签的src属性?

    是否可以设置srcCSS 中的属性值 大多数情况下 我们这样使用它 img src pathTo myImage jpg 我希望它是这样的 img class myClass myClass some src property url pa
  • Newtonsoft.Json.DeserializeObject 抛出什么异常?

    Newtonsoft Json DeserializeObject 抛出什么异常 我想处理他们 http james newtonking com json help topic html M Newtonsoft Json JsonCon
  • GIT:根文件夹中存在 CRA 应用程序,我如何正确推送到 git?

    我对 git 很陌生 这可能是一个愚蠢的问题 但我真的不知道如何解决这个问题 我一直在努力寻找答案 但我找不到 我试图使用 React js 和 Node js 创建我的项目 我创建了从 npx create react app clien
  • 存储用户设置 - 使用“标志”或“位”而不是一堆布尔值有什么问题吗?

    我正在为我的 MVC 应用程序设计用户设置 现在我有大约 20 个用户可以切换的布尔设置 由于每个用户总是拥有每个设置 因此我正在考虑将每个设置存储为用户表中的布尔值 尽管随着应用程序需求的增长 这会变得笨拙 第一个问题 在这种情况下 表上
  • Swift-删除推送通知徽章号码?

    我试图快速删除图标徽章 但 PFInstallation 似乎不再起作用 我该怎么做呢 您可以通过将应用程序徽章图标设置为 0 来 删除 它 斯威夫特 UIApplication sharedApplication applicationI
  • 我可以在 emberjs 中为视图提供显示动画吗

    这是使用 emberjs 路由器的示例http jsbin com agameq edit http jsbin com agameq edit 现在我想要一些显示动画 例如当路线更改时淡入或淡出 我应该怎么办 Every View在 em
  • 选择 Apache Hive 中是否存在表

    我有一个配置单元查询 其格式如下 select from table1 left join select from table2 on some condition The table2根据环境的不同 可能不存在 因此 如果仅存在 tabl
  • MIPS $gp 寄存器

    使用有危险吗 gp注册来存储一个值 我想我的问题是真正的功能是什么 gp它是否以某种方式在幕后被调用 以便如果我使用它 事情可能会变得非常非常错误 好吧 gp 寄存器指向全局区域 习俗 http en wikipedia org wiki
  • 文件中的修改历史记录

    我曾在一些没有使用源代码管理的地方工作过 他们似乎养成了在更改的代码周围添加注释来解释更改的习惯 以便可以恢复事情 我发现这使得代码非常难以阅读 并且相当坚定地认为在引入源代码控制之后不需要这样的注释 因为修订历史记录将让您将票证与更改相匹
  • 在Android中将电话号码格式化为E164格式

    我想将设备中联系人的每个电话号码转换为 E 164 格式 所以 我在下面使用了开源 库电话号码 https github com googlei18n 所以我像这里一样使用它 Phonenumber PhoneNumber formatte
  • linspace 相对于冒号“:”运算符的优点是什么?

    写作有什么好处吗 t linspace 0 20 21 over t 0 1 20 我知道前者产生一个向量 就像第一个一样 谁能告诉我一些情况linspace有用过t 0 1 20 这不仅仅是可用性 尽管文档说 The linspace函数
  • MS Word、OpenXML、PageSetup、方向和 4 方向边距

    我用 OpenXML 制作了这个文档 我正在学习 OpenXML 哦 太难了 MainDocumentPart m wd AddMainDocumentPart m Document new Document Body b1 new Bod
  • 在页面加载时在 CSS 中触发没有 javascript 的转换

    我想通过 CSS 过渡来增加栏的宽度 但不喜欢通过悬停事件触发它 例如http jsfiddle net TFHn9 http jsfiddle net TFHn9 我只是想要一个即时动画 当页面加载时 当然不需要Javascript 有机
  • 如何编译/安装node.js(无法配置cxx编译器!)(Ubuntu)。

    如何在 Ubuntu 上编译 安装 Node js 它失败并出现以下错误cxx compiler 单线安装所有需要的依赖项 curl 和 git 并不是真正需要的 但非常有用 如果通过 nvm 安装也需要 sudo apt get inst
  • 如何在 JavaScript 中实现锁

    怎么可能相当于lock在 C 中可以用 JavaScript 实现吗 因此 为了解释我的想法 一个简单的用例是 用户点击按钮B B引发 onclick 事件 如果B is in event state该事件正在等待B将在ready stat