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