微信小程序云开发之实时监听数据库某集合数据条数

我们常用的聊天功能,或者是在游戏中与队友的游戏数据保持一致,等等这些都是通过数据实时推送进行的。

那么今天我就来讲一个比较简单的示例,实时监听集合中的数据条数。这是最简单的示例:

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版本以上。
微信小程序云开发之实时监听数据库某集合数据条数_第1张图片

当然,上面是最简单的示例。稍微复杂点的就是结合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)
  }
})

你可能感兴趣的:(JS,微信小程序)