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

发布于 2022-09-04 03:06:51 字数 353 浏览 17 评论 0

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

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

类似java里的加锁。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清醇 2022-09-11 03:06:52

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

維他命╮ 2022-09-11 03:06:52

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

瞎闹 2022-09-11 03:06:52

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

岁月静好 2022-09-11 03:06:52

我也有作者一样的需求,有人解答吗?谢谢

遇见了你 2022-09-11 03:06:51

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

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

希望可以对你有帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文