[英]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 的回调,它将触发您的更新方案。
可能至少有两种选择:
instance
的唯一用户,您始终可以在执行异步调用之前向instance
添加标志,例如instance.state = "updating"
或instance.locked = true
并重置回调或承诺解析中的值。 这不能免于操纵,但应该可行且易于执行。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.