我有一个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是高度异步的。
以同步方式做任何我想做的事情?
答案 0 :(得分:1)
我对IndexedDB
回调的处理方法是使用publish subscribe pattern进行事件调度。您可以编写自己的处理程序或使用JQuery触发器。
我所做的是对所有逻辑IndexedDB
事件进行分组,当IndexedDB
回调发生时,它会通知发布者发生了什么类型的事件,发布者将通知所有等待的函数那件事。
我拥有的示例事件是: 数据库创建,索引完成,同步开始,同步完成...... 我还有同步进度的事件,用于通知用户进度(我正在批量同步)。
发布 - 订阅模型允许我将IndexedDB
代码与UI代码进行高级别的解耦,从而允许我轻松修改事件操作代码或向同一事件添加更多侦听器。如果您需要顺序功能,您可以链接事件,当一个完成时触发它已完成并且下一个可以继续。
答案 1 :(得分:0)
在规范最终确定之前,IndexedDB API的同步版本已被放弃,因此您将始终以异步方式工作。
我也对API感到恼火所以我创建了一个名为db.js的简单包装器,它使用Promises进行查询。如果您足够幸运,只针对支持生成器的平台,您可以将它们与db.js组合到make it more synchronous。