【发布时间】:2014-01-23 14:03:57
【问题描述】:
我有一个 IndexedDB,它在本地缓存具有三个属性 a、b 和 c 的数据。 a 和 b 一起构成一个复合键,c 是我要的内容。
现在,客户端从服务器获取我想要显示的项目列表。然后客户端应该在 IndexedDB 中查找 (a,b) 并检索匹配的 c,然后使用 sha1 对 c 进行哈希处理(使用 Rusha,这已经可以正常工作了)。
对于那些 sha1(c_client) 与 sha1(c_server) 不匹配的项目,客户端从服务器检索所有 (a,b) 对(使用一个带有 JSON 序列化数组 (a,b) 的 GET 请求))。服务器返回更新后的c内容,然后客户端将新的c存入IndexedDB中,然后将整个对象数组交给显示函数。
如您所见,大部分逻辑绝对需要顺序操作 - 但 IndexedDB 是高度异步的。
有什么方法可以同步地做我想做的事吗?
【问题讨论】:
-
在主流浏览器实现 ES6 生成器之前,没有办法“只同步编写”。最好的办法是使用control-flow library 来减轻痛苦或在 Javascript 的异步感知超集中编写程序,该超集编译成代码的回调版本,例如 this
-
基本上这需要我将整个 IndexedDB API 包装到 async.js-wrapper 中?
-
不,您的代码仍将通过与以前相同的回调与 indexdBAPI 进行交互。不同之处在于,这些工具让您的代码更有条理,而不是使用嵌套回调的"pyramid of doom" 模式。
标签: javascript html indexeddb asynccallback