我有一个 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中,然后将整个对象数组交给display函数。
如您所见,大部分逻辑绝对需要顺序操作 - 但 IndexedDB 是高度异步的。
有什么方法可以同步完成我想做的事情吗?
最佳答案
我对 IndexedDB
回调的方法是使用事件调度,使用 publish subscribe pattern .您可以编写自己的处理程序或使用 JQuery 触发器。
我所做的是将所有逻辑 IndexedDB
事件分组,当 IndexedDB
回调发生时,它会通知发布者发生了什么类型的事件,发布者将通知所有正在等待该事件的功能。
我的示例事件是: 数据库创建,索引完成,同步开始,同步完成... 我还有同步进度的事件,用于通知用户进度(我是批量同步)。
发布-订阅模型允许我将 IndexedDB
代码与 UI 代码高度解耦,从而允许我轻松修改事件操作代码或向同一事件添加更多监听器。如果您需要顺序功能,您可以链接事件,当一个事件完成时触发它已经完成,下一个可以继续。
关于javascript - IndexedDB:避免回调 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310394/