javascript - IndexedDB:避免回调 hell

标签 javascript html indexeddb asynccallback

我有一个 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/

相关文章:

javascript - indexedDB 中按数字/日期排序的意外行为

html - 在 ServiceWorker 中访问 indexedDB。竞争条件

javascript - 无法更改 mousemove 上的值

html - 在表格单元格中内联输入和 div

javascript - IndexedDB:未捕获( promise )DOMException

jquery - 在响应式插件上使用 CSS 调整包装器大小

php - 子查询返回多于 1 行错误

javascript - 如何将两个函数绑定(bind)到 React 中的按钮单击

javascript - 使用javascript获取伪元素的offsetLeft

javascript - 在 AS3 和 HTML5 中创建 3D 条形图