我的应用有一个与中央couchdb同步的本地pouchdb。
当应用从更改Feed收到更改时,应用会更新模型和ui。
这应仅适用于本地未发生的变更:
当更改在本地(由用户,在ui中)发生时,应用程序使用更改的属性更新模型。然后它将(db.put)更新的对象放入本地pouch-database(触发change事件)。当put的响应到来时,应用程序会更新模型中的rev属性。
问题1 :是否可以将db.changes过滤为仅在本地pouchdb实例中未生成的更改?
因为我找不到上述问题的解决方案,所以我现在将本地模型对象与db.changes提供的更改文档进行比较(通过比较字符串化值)。
问题是:来自db.changes的更改事件发生在db.put的响应到来之前!此时我的应用还没有更新模型对象的转速,这使得很难比较两个对象 - 它们总是不同的,因为转换是不同的。
我必须补充一点,对象的结构很灵活,因为用户可以配置自己的数据结构。所以我不能(轻松)只比较可能已经改变的字段。如果没有更好的方法,我将不得不根据这个想法破解解决方案。
所以问题2 是:是否有可能让更改事件等到db.put的响应到达之后?
我想我可以使用setTimeout,但这似乎非常hacky。
非常感谢帮助。
答案 0 :(得分:2)
这是PouchDB中的已知错误,但现在应该修复:请参阅this commit。
您可以尝试the nightly build,看看这是否还是个问题?如果是这样,请随时在Github上提交另一个问题。谢谢!
编辑:要回答您的第一个问题,这有点棘手。我认为最好的方法是在文档中插入一些信息来跟踪文档的生成位置。 (例如,您可以使用Math.random()
为您的用户提供随机ID,将其存储在localStorage或_local doc中,然后将其包含在每个文档中。)