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