多页面同时读写localStorage,如何实现加锁?

下面这一段简单的代码,我希望只有一个线程去修改。

var key = 'key';
if(localstorage.getItem(key) == null) {
    localstorage.setItem(key, 'page a');
}

类似java里的加锁。

举个更详细的例子。页面轮询ajax获取通知,打开多个页面的时候只需要让其中一个页面去执行,将结果写入到localStorage,其他页面从localStorage读取。关键在于要保证只要一个页面去轮询,所以在localStorage里的某个字段做标记。读取标记和修改标记时一个完整的操作,并且一个线程没操作完的时候,另一个线程不能去操作。

阅读 9.1k
5 个回答

我记得网易音乐在播放的时候有个逻辑是,每当播放音乐的时候就去改写session中的正在播放的音乐的名称,然后开启一个定时器去读session中正在播放的歌曲名,如果当前播放的歌曲名和session中的名称不一致就暂停当前页面的播放。

可以专门用一个状态字段,写数据前先打开状态,写完后关闭状态。每次写之前先检查锁字段是否被关闭,如果被关闭就定时器监听吧,一打开就开始就接着来写动作。

希望可以对你有帮助。

为什么会有这样的需求,业务场景是怎样的呢?

同上,你的业务场景是啥,怎么会有这种需求?

说下场景。
打开多个页面,只让其中一个页面和服务端通信。这时候就需要加个标记,用localStorage。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题