javascript - 多页面同时读写localStorage,如何实现加锁?
巴扎黑
巴扎黑 2017-04-10 17:56:18
[JavaScript讨论组]

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

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

类似java里的加锁。

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

巴扎黑
巴扎黑

全部回复(4)
巴扎黑

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

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

希望可以对你有帮助。

PHP中文网

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

天蓬老师

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

黄舟

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号