【问题标题】:Risk of asynchronously assigning a JavaScript variable异步分配 JavaScript 变量的风险
【发布时间】:2018-12-15 20:05:21
【问题描述】:

有很多与 (a) 同步执行和承诺相关的 stackoverflow 问题,但我没有找到答案。

想象一下我有以下几点:

var number = 0;
someAsyncFunctionWithCallback(function(){
    number++;
});
// ^ execute the above multiple times

由于函数每次调用的执行时间不同,回调会在不同的时间被调用。因此,我想知道变量递增线的行为会是什么。在 Java 中,我可以将变量声明为 synchronous,这样每个增量都会被考虑在内。使用上面的代码,每个数字的增量是保证还是不一定?

【问题讨论】:

  • 我看不出每次执行不应该增加它的原因,问题是你想在什么时候测试它,如果你想保持它只是++ 增加或实际需要的东西链式或有序
  • 根据我的经验,你应该不用担心。我没有遇到问题
  • @johnSmith 我担心可能存在某种竞争条件,但下面的答案说 javascript 不执行真正的多线程,因此所有变量访问都保持同步。

标签: javascript asynchronous callback synchronization


【解决方案1】:

JavaScript 总是与自身同步。这不是真正的多线程,JS不支持也不使用。

【讨论】:

  • 啊,有道理。我对此并不完全确定。
【解决方案2】:

只要您能确定someAsyncFunctionWithCallback 的运行时间和频率,此方法就没有问题。您只需要注意这样一个事实,即在任何给定点检查您的变量只会根据回调执行的次数反映其当前值。

【讨论】:

    【解决方案3】:

    每个回调function(){ number++;} 稍后会以不确定的顺序调用以增加number。这里只能保证一件事,N次回调执行会增加N倍变量number

    【讨论】:

    • 很高兴知道。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多