gpt4 book ai didi

couchdb - 如何知道我们何时与远程 CouchDB 失去同步

转载 作者:行者123 更新时间:2023-12-02 14:40:22 28 4
gpt4 key购买 nike

我有一个使用 PouchDB 的移动应用程序,用于监听来自远程 CouchDB 服务器的更改。有时,应用程序会推送自己的更改。有没有办法检查我是否仍然有到远程 CouchDB 实例的事件“连接”?

到目前为止,我能想到的最佳解决方案是定期调用 db.info 并查看是否返回错误,但这似乎有点冒险。

最佳答案

据我所知,PouchDB 没有任何事件通知我们由于互联网连接中断而停止同步。我做了一个小黑客来解决这个问题。

当同步正确发生并且您对本地 PouchDB 进行更改时,事件触发的顺序是:

  1. 活跃
  2. 改变
  3. 暂停

但是,当互联网中断时,顺序是:

  1. 活跃
  2. 暂停

未与远程数据库同步时,不会触发任何更改事件。

因此,我所做的是为事件事件和更改事件创建两个标志,分别为 pouchDbSyncActiveEventpouchDbSyncChangeEvent,并将两者初始化为 false.在 'active' 事件的回调中将 pouchDbSyncActiveEvent 设置为 true。无论是否有互联网,这都会运行。在 'change' 事件的回调中将 pouchDbSyncChangeEvent 设置为 true。如果没有互联网,则不会运行,并且 pouchDbSyncChangeEvent 仍将保持 false,并且 'paused' 事件将在不久后触发。这通知我们同步已停止。

代码:

let pouchDbSyncActiveEvent = false
let pouchDbSyncChangeEvent = false

localPouchDb.sync(remoteCouchDb, {
live: true,
retry: true
})
.on('active', (change) => {

pouchDbSyncActiveEvent = true

})
.on('change', (change) => {

pouchDbSyncChangeEvent = true

})
.on('paused', (info) => {

if(pouchDbSyncActiveEvent == true && pouchDbSyncChangeEvent == false){

// Gotcha! Syncing with remote DB not happening!

}
else {

// Everything's ok. Syncing with remote DB happening normally.

}

pouchDbSyncActiveEvent = false
pouchDbSyncChangeEvent = false

})

注意:您可以按照您希望的顺序编写 .on 事件监听器方法,但最好按照它们的执行顺序编写它们:)

关于couchdb - 如何知道我们何时与远程 CouchDB 失去同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892438/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com