这是关于我的问题的场景。
我创建了一个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;
我想可能的解决方案是在访问时锁定dataCache,如果没有人访问它,就可以设置它。
我可能需要像C#中的锁一样,但我真的不知道如何在JavaScript中执行它,或者它甚至不是JavaScript中的问题,因为JS是单线程的,它运行正常。我对JS不太熟悉。
答案 0 :(得分:1)
没有锁定机制,因为javascript作为单线程执行。
来自多线程环境的人混淆的原因是javascript总是像“异步”一样工作。但事实并非如此。
当某些事件发生时,Javascript在内部使用“回调”,它将执行对Java / .Net开发人员来说有点棘手的回调。 Javascript总是在一个线程上运行,没有任何东西同时执行,它有“javascript执行周期”(See For Event Loop)可以说是一个简单的while(1){}代码在你的回调的每个循环中反复执行代码启动等等。
您的案例唯一可能的解决方案是来自setTimeout函数的回调,它将触发您的更新方案。