多页面同时读写localStorage,如何实现加锁?
下面这一段简单的代码,我希望只有一个线程去修改。
var key = 'key';
if(localstorage.getItem(key) == null) {
localstorage.setItem(key, 'page a');
}
类似java里的加锁。
举个更详细的例子。页面轮询ajax获取通知,打开多个页面的时候只需要让其中一个页面去执行,将结果写入到localStorage,其他页面从localStorage读取。关键在于要保证只要一个页面去轮询,所以在localStorage里的某个字段做标记。读取标记和修改标记时一个完整的操作,并且一个线程没操作完的时候,另一个线程不能去操作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
为什么会有这样的需求,业务场景是怎样的呢?
同上,你的业务场景是啥,怎么会有这种需求?
说下场景。
打开多个页面,只让其中一个页面和服务端通信。这时候就需要加个标记,用localStorage。。
我也有作者一样的需求,有人解答吗?谢谢
我记得网易音乐在播放的时候有个逻辑是,每当播放音乐的时候就去改写session中的正在播放的音乐的名称,然后开启一个定时器去读session中正在播放的歌曲名,如果当前播放的歌曲名和session中的名称不一致就暂停当前页面的播放。
可以专门用一个状态字段,写数据前先打开状态,写完后关闭状态。每次写之前先检查锁字段是否被关闭,如果被关闭就定时器监听吧,一打开就开始就接着来写动作。
希望可以对你有帮助。