我们常用的聊天功能,或者是在游戏中与队友的游戏数据保持一致,等等这些都是通过数据实时推送进行的。
那么今天我就来讲一个比较简单的示例,实时监听集合中的数据条数。这是最简单的示例:
db.collection('searchta')
.watch({
onChange: snapshot=> {
console.log('docs\'s changed events', snapshot.docChanges)
this.setData({
peopleCount:snapshot.docChanges.length
})
},
onError: err=> {
console.error('the watch closed because of error', err)
}
})
没错,就是watch(),它能更高级的代替get()。在上述示例代码中,snapshot.docChanges即是返回的数据库信息,以数组的形式返回。所以,这样就可以实时获取数据库的信息数量。
需要注意的是:在使用watch的时候,onChange和onError必须同时使用,否则会报错。另外,如果仅使用watch,需要将调式基础库改为2.8版本以上。
当然,上面是最简单的示例。稍微复杂点的就是结合limt()、orderBy()等一起使用。这时候需要注意,调式基础库需要在2.9.2版本以上。所以,你也可以直接选择最高版本。
const db = wx.cloud.database()
const watcher = db.collection('todos')
// 按 progress 降序
.orderBy('progress', 'desc')
// 取按 orderBy 排序之后的前 10 个
.limit(10)
.where({
team: 'our dev team'
})
.watch({
onChange: function(snapshot) {
console.log('docs\'s changed events', snapshot.docChanges)
console.log('query result snapshot after the event', snapshot.docs)
console.log('is init data', snapshot.type === 'init')
},
onError: function(err) {
console.error('the watch closed because of error', err)
}
})
// ...
// 等到需要关闭监听的时候调用 close() 方法
watcher.close()
onChange 和 onError 是必传参数。onChange 用于接收变更快照,onError 用于处理监听错误。如果监听发起失败或监听过程中出现不可恢复的错误,则会终止监听并通过 onError 抛出异常。onChange 会在第一次监听初始化及后续数据变更时收到推送事件。
当然了,你也可以通过筛选条件只对某一条数据进行监听。示例:
const db = wx.cloud.database()
const watcher = db.collection('todos').doc('x').watch({
onChange: function(snapshot) {
console.log('snapshot', snapshot)
},
onError: function(err) {
console.error('the watch closed because of error', err)
}
})