setItem(key,value)
函数是否异步?
localStorage.setItem("key",someText);
答案 0 :(得分:117)
不,所有localStorage
次呼叫都是同步的。
答案 1 :(得分:53)
实际上。网络存储不再是HTML5核心标准的一部分,它已被拆分。
可以找到相关(草案)规范here,您会注意到的一点是它没有提到任何地方的同步或异步。
但是,对文本的分析表明它必须是同步的(我的粗体):
setItem(key,value)方法必须首先检查与该对象关联的列表中是否已存在具有给定键的键/值对。
如果没有,则必须将新的键/值对添加到列表,并使用给定的键并将其值设置为值。
如果列表中存在给定的键,并且其值不等于value,则必须将其值更新为为value。如果其先前的值等于value,则该方法必须不执行任何操作。
在标准中,must
,shall
和may
等字词带有非常特定含义。它正在谈论方法必须做什么的这一事实意味着该方法本身必须这样做,而不是将其推迟到以后的某个时间。
这也符合常识。如果setItem
是异步的,则可以将项目设置为特定值,然后立即检索它,获取其先前的值。
是存储接口部分底部的注释,暗示了异步行为的可能性:
此规范不要求上述方法等待数据物理写入磁盘。只需要在访问相同的键/值对的基础列表的不同脚本中看到一致性。
但是,这仅仅是针对长期存储的内容。最后一句要求访问同一存储对象的脚本需要同步查看内容。
答案 2 :(得分:0)
这个问题已经回答。对于将来遇到此问题的任何人,javascript本质上都是同步的。事情只是异步的,我们指定这样做。因此,您可以假定所有事物都是同步的,除非将它们指定为异步的。这是使用javascript而不是使用Javascript编写的框架。他们有时会破坏这种做法。像NodeJs。