繁体   English   中英

在 javascript 中,我可以锁定一个 var 吗?

[英]In javascript, can I lock a var?

这是关于我的问题的场景。

我制作了一个 var dataCache,它缓冲了我从远程服务器获取的数据。 我每 30 秒更新一次 dataChache,就像这样,

setInterval(function(){
      instance.loadJsonFromRemote(configuration.dataUrl,function(data){
        instance.dataCache = data;
});
}, 30000);

并且 dataCache 可能会在更新的同时被访问。

例如,

var cool = instance.dataCache.cool

上面的代码在数据更新代码运行时运行,

instance.dataCache = data;

我想可能的解决方案是在访问数据缓存时将其锁定,如果没有人访问它,则可以设置它。

我可能需要锁定 C# 之类的东西,但我真的不知道如何在 JavaScript 中执行此操作,或者在 JavaScript 中它甚至不是问题,并且它在单线程中运行良好。 我对JS不是很熟悉。

没有锁定机制,因为 javascript 作为单线程执行。

对于来自多线程环境的人来说,混淆的原因是 javascript 总是像“异步”方式一样工作。 但事实并非如此。

Javascript 在内部与“回调”一起工作,当某些事件发生时,它将执行其回调,这对于 Java/.Net 开发人员来说可能有点棘手。 Javascript 始终在单个线程上工作,并且没有同时执行任何操作,它具有“javascript 执行周期”( 请参阅事件循环),可以说是一个简单的 while(1) {} 代码在您的回调的每个周期中一遍又一遍地执行代码发起等

对于您的情况,唯一可能的解决方案是来自 setTimeout function 的回调,它将触发您的更新方案。

可能至少有两种选择:

  1. 如果您是instance的唯一用户,您始终可以在执行异步调用之前向instance添加标志,例如instance.state = "updating"instance.locked = true并重置回调或承诺解析中的值。 这不能免于操纵,但应该可行且易于执行。
  2. If you want to make sure nobody will modify the object in the meantime, save the original reference to instance into a temporary variable, replace the current object with an empty object, a placeholder object or (the propably most elegant way) a freezed clone of原始instance 更新后,重置对原始instance的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM