更改:仅过滤来自其他数据库实例的更改

changes: filter only changes from OTHER DB-instances

我的应用有一个与中央 couchdb 同步的本地 pouchdb。

该应用会在收到来自更改​​源的更改时更新模型和 ui。

这应该只发生在本地没有发生的变化:

当本地发生更改时(由用户,在 ui 中),应用会使用更改后的属性更新模型。然后它将 (db.put) 更新后的对象放入本地 pouch 数据库(这会触发 change 事件)。当来自 put 的响应到达时,应用程序更新模型中的 rev-attribute。

问题 1是否可以将 db.changes 过滤为仅在本地 pouchdb 实例中未生成的更改?

因为我没有找到上述问题的解决方案,所以我现在将本地模型对象与 db.changes 提供的更改文档进行比较(通过比较字符串化值)。

问题是:db.changes 的更改事件发生在 db.put 的响应到达之前!此时我的应用程序尚未更新模型对象的转速,这使得比较这两个对象非常困难 - 它们总是不同,因为转速不同。

我必须补充一点,对象的结构是灵活的,因为用户可以配置自己的数据结构。所以我不能(轻松地)只比较可能已更改的字段。如果没有更好的方法,我将不得不根据这个想法破解一个解决方案。

所以问题 2 是:是否可以让更改事件等到 db.put 的响应到达之后?

我想我可以使用 setTimeout,但这看起来很老套。

非常感谢您的帮助。

这是 PouchDB 中的一个已知错误,但现在应该修复它:请参阅 this commit

您可以尝试 the nightly build 看看这是否仍然是一个问题?如果是这样,请随时在 Github 上提交另一个问题。谢谢!

编辑: 要回答你的第一个问题,有点棘手。我认为最好的方法是在您的文档中插入一些信息来跟踪文档的生成位置。 (例如,您可以使用 Math.random() 为您的用户提供一个随机 ID,将其存储在 localStorage 中或作为 _local 文档,然后将其包含在每个文档中。)