下面这一段简单的代码,我希望只有一个线程去修改。
var key = 'key';
if(localstorage.getItem(key) == null) {
localstorage.setItem(key, 'page a');
}
类似java里的加锁。
举个更详细的例子。页面轮询ajax获取通知,打开多个页面的时候只需要让其中一个页面去执行,将结果写入到localStorage,其他页面从localStorage读取。关键在于要保证只要一个页面去轮询,所以在localStorage里的某个字段做标记。读取标记和修改标记时一个完整的操作,并且一个线程没操作完的时候,另一个线程不能去操作。
我记得网易音乐在播放的时候有个逻辑是,每当播放音乐的时候就去改写session中的正在播放的音乐的名称,然后开启一个定时器去读session中正在播放的歌曲名,如果当前播放的歌曲名和session中的名称不一致就暂停当前页面的播放。
可以专门用一个状态字段,写数据前先打开状态,写完后关闭状态。每次写之前先检查锁字段是否被关闭,如果被关闭就定时器监听吧,一打开就开始就接着来写动作。
希望可以对你有帮助。
为什么会有这样的需求,业务场景是怎样的呢?
同上,你的业务场景是啥,怎么会有这种需求?
说下场景。
打开多个页面,只让其中一个页面和服务端通信。这时候就需要加个标记,用localStorage。。