【发布时间】:2015-01-05 02:28:57
【问题描述】:
对不起我糟糕的英语。
我正在使用 localStorage 来存储一些属性。每个属性都有自己的键和值,键和值是动态生成的。所以我不知道他们中有多少人。
在 page1 上保存所有属性(一键)。
在第 2 页我称之为“存储”事件。我需要读取所有键和值并使用这些重新呈现页面内容。
问题是每个键/值对都会触发“存储”事件。而且我不想为每个键/值对重新渲染 page2 的内容。我想等到所有属性都保存在 page1 上,然后重新渲染 page2 的内容。
所以我需要确保所有属性都保存在第 1 页,然后我需要在第 2 页阅读它们。
我的问题:localStorage 的存储过程是同步的吗? “同步”对我来说意味着同时只执行一个 setItem 命令,并且所有 setItem 命令都按照我编写的确切顺序执行。 所以我什么时候写:
(loop start)
localStorage.setItem("bar1", foo1)
localStorage.setItem("bar2", foo2)
...
localStorage.setItem("bar100", foo100)
(loop end)
我可以确定所有项目都保存在之前(“bar100”,foo100)吗?
或者可能有任何问题并且 ("bar100", foo100) 可能会在任何前一个项目之前保存?
亚历克斯
【问题讨论】:
-
是的。 JavaScript 本身是单线程语言。程序从 1 行、2 行等开始执行。
-
如果没有回调,一般是同步的,localStorage方法是同步的,所以可以确定代码是按顺序执行的,问题是,为什么要按什么顺序被写进去。我怀疑你期望在 localStorage 对象中的键中排序,而 那个 你不会有,因为对象中没有顺序.
-
如果你想把一堆东西按顺序序列化,然后把它们都放在一个数组中,在数组上调用 JSON.stringify 并保存它。 localStorage 项目没有先天顺序。
-
根据@jfriend00 的建议,获取或保存一个对象比编写一大堆单独的项目要少得多