HTML5 localStorage是否是asynchronous的?
setItem(key,value)
函数是asynchronous的吗?
localStorage.setItem("key",someText);
不,所有localStorage
调用都是同步的。
其实。 networking存储不再是HTML5核心标准的一部分,它已被分离出来。
有关(草案)规范可以在这里find,你会注意到的一件事是,它没有提到任何地方的同步或asynchronous。
然而,对文本的分析将表明它必须是同步的(我的大胆):
setItem(key,value)方法必须首先检查与对象关联的列表中是否已经存在具有给定键的键/值对。
如果没有,则必须将新的键/值对添加到列表中,使用给定的键并将其值设置为值。
如果给定键存在于列表中,并且其值不等于值,则必须将其值更新为值。 如果它以前的值等于值,那么该方法就不会做任何事情。
在标准中,像must
这样的词语shall
和may
具有非常具体的含义。 事实上,这是说方法必须做什么意味着该方法本身必须做到这一点,而不是稍后推迟。
这也顺从常识。 如果setItem
是asynchronous的,那么可以将一个项目设置为一个特定的值,然后立即检索它,获得它以前的值。
存储接口部分的底部有一个提示,提示asynchronous行为的可能性:
本规范不要求上述方法等待数据被物理写入磁盘。 只有访问相同的键/值对底层列表的不同脚本才能看到的一致性是必需的。
但是,这只是根据长期存储的内容而定。 最后一句强制访问相同存储对象的脚本需要同步查看事物。