javascript - jQuery/AJAX并发访问全局变量

标签 javascript jquery concurrency thread-safety

我正在编写一些执行普通 ajax 调用的 jQuery 代码。我有一个全局 Javascript 变量,我需要在每次调用时增加线程安全。如果这是 Java,我会使用 synchronized 但事实并非如此 :-)

这是一个代码片段:

var myval;

function myFunc()
{
    $.ajax({
        url: myurl,
        type: 'GET',
        data: { ...my data... },
        success: function()
        {
            myval++;
        }
    });
}

鉴于 myFunc() 与点击事件相关联,我如何确保 myvar 始终安全/一致地增加?我知道我可以也许使用async: false,但我宁愿避免它。我什至不确定它会那样工作。

感谢您的帮助!

最佳答案

没问题 - JS 不会遇到原子性问题,因为没有(用户可见的)线程[*]

除了响应事件或初始脚本加载外,JS 中没有任何事情发生。一段代码不可能在增量期间误读 myval,因为整个 success 回调必须在任何其他事件处理代码开始之前完成。

[*] 是的,有 WebWorker,但它们使用消息传递而不是变量共享。

关于javascript - jQuery/AJAX并发访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077844/

相关文章:

javascript - 用ajax保存jQuery点击?

javascript - 由于函数表达式和函数声明基本上做同样的事情,我什么时候应该使用哪个?

scala - 你如何处理 Akka Flow 中的 futures 和 mapAsync?

javascript - 是否可以将信号从 javascript 连接到 qml?

javascript - 如何使用 'keyup' 事件将小写字符更改为大写字符?

javascript - 可以在 switch 表达式中使用数学运算符吗?

javascript - 客户端或服务器正在删除变音符号

javascript - 由于时间间隔,AJAX 请求 get 被调用两次

Java ThreadPool 重用可运行对象,而不是为每个任务创建新对象

java - CountDownLatch 同步