我有一个使用PouchDB的移动应用程序,该应用程序侦听来自远程CouchDB服务器的更改。有时,应用程序会推送自己的更改。有没有一种方法可以查看我是否仍与远程CouchDB实例保持活动的“连接”?
到目前为止,我能想到的最好的解决方案是定期调用db.info并查看是否返回错误,但这似乎有些冒险。
小智 7
据我所知,PouchDB 没有事件通知我们同步因互联网连接中断而停止。我做了一个小技巧来解决这个问题。
当同步正确发生并且您对本地 PouchDB 进行更改时,触发事件的顺序是:
但是,当互联网中断时,顺序是:
未与远程数据库同步时,不会触发更改事件。
所以,我做了什么是由两个标志的积极变化事件,pouchDbSyncActiveEvent
并pouchDbSyncChangeEvent
分别与初始化既是false
。打开pouchDbSyncActiveEvent
到true
回调的'active'
事件。无论是否有互联网,这都会运行。打开pouchDbSyncChangeEvent
到true
回调的'change'
事件。如果没有互联网,这将不会运行并且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
})
Run Code Online (Sandbox Code Playgroud)
注意:
您可以.on
按照您希望的顺序编写事件侦听器方法,但最好按照它们执行的顺序编写它们:)
归档时间: |
|
查看次数: |
2459 次 |
最近记录: |