收藏
回答

求问怎么样才能正确关掉 Collection.watch 呢?

尝试了在

onLoad 里面watch 之后直接关,也试也引用到 onUnload 再关,都没有生效,用的是watcher.close()

在从watch 的页面返回到上一页面之后,仍然会有 watch数据传递出来。

最主要的是,如果想要在另一个页面 watch 另外一个集合,新的watch就不会生效,没有数据。如果还是watch之前的集合就不会有问题。




最后一次编辑于  09-23
回答关注问题邀请回答
收藏

3 个回答

  • 邓坤力
    邓坤力
    09-24

    感谢反馈,是不同环境的时候只有第一个会生效的问题,会尽快修复

    09-24
    赞同 1
    回复
  • 张雷@七洲
    张雷@七洲
    09-23


    以上watch在各自页面编译之后全部能正常读取数据。但是通过一个页面wx.navigateTo分别跳转、返回时,会出现上图的情形。只有后边的watch与第一个watch相同数据时,才可以正常读取数据,其他情形都是返回空数组,没有报错。


    09-23
    赞同
    回复 11
    • 张雷@七洲
      张雷@七洲
      09-23
      另外在同一个页面的多个watch,与第一个同环境不同集合的有效,不同环境的读不到数据,不报错
      09-23
      回复
    • 白宦成
      白宦成
      09-23回复张雷@七洲
      测试代码能提供一下
      09-23
      回复
    • 张雷@七洲
      张雷@七洲
      09-23回复白宦成
      onLoad: async function (options) { let db1 = wx.cloud.database({ env: 'xpb-s1d9g' }); let orderollection = db1.collection("order") let cmd = db1.command const watcher = orderollection .where({ sername: cmd.in(["stp0000", "stp0001"]) }) .watch({ onChange: async function (snapshot) { console.log('snapshot.docChanges', snapshot.docChanges) console.log('snapshot.docs', snapshot.docs) console.log('snapshot.type=== "init"', snapshot.type === 'init') }, onError: function (err) { console.error('the watch closed because of error', err) } }) },
      09-23
      回复
    • 张雷@七洲
      张雷@七洲
      09-23
      onLoad: async function (options) { let db = wx.cloud.database({ env: 'xpa-345zb' }); let xbservicecollection = db.collection("xbservice") let cmd = db.command const watcher = xbservicecollection .where({ gender: cmd.in(["female", 0]) }) .watch({ onChange: async function (snapshot) { console.log('snapshot.docChanges', snapshot.docChanges) console.log('snapshot.docs', snapshot.docs) console.log('snapshot.type=== "init"', snapshot.type === 'init') }, onError: function (err) { console.error('the watch closed because of error', err) } }) },
      09-23
      回复
    • 张雷@七洲
      张雷@七洲
      09-23
      onLoad: async function (options) { let db = wx.cloud.database({ env: 'xpa-345zb' }); let xbinformationcollection = db.collection("xbinformation") let cmd = db.command const watcher = xbinformationcollection .where({ // gender: cmd.in(["female", 0]) country:"" }) .watch({ onChange: async function (snapshot) { console.log('snapshot.docChanges', snapshot.docChanges) console.log('snapshot.docs', snapshot.docs) console.log('snapshot.type=== "init"', snapshot.type === 'init') }, onError: function (err) { console.error('the watch closed because of error', err) } }) },
      09-23
      回复
    查看更多(6)
  • 白宦成
    白宦成
    09-23

    你挂一个 onError ,看看结果,是不是有报错。

    09-23
    赞同
    回复 6
    • 张雷@七洲
      张雷@七洲
      09-23
      老师早!我半年前就是看你的视频开始学小程序云开发的。没有报错,就是换到另一个页面另一个集合之后,初始化和变动的时候都反馈空数组。我刚才注意到我不光是集合变更了,还跨了环境
      09-23
      回复
    • 张雷@七洲
      张雷@七洲
      09-23
      真机调试和工具中都没有报错的
      09-23
      回复
    • 白宦成
      白宦成
      09-23回复张雷@七洲
      提供一些复现的代码?
      09-23
      回复
    • 张雷@七洲
      张雷@七洲
      09-23
      代码上应该没有问题,因为两个页面在开发工具和手机预览的时候都是按设想表现的。昨天两个页面都做完之后,真机调试的时候才发现问题。我先自己试一下看两个watch不跨环境的时候会不会有问题
      09-23
      回复
    • 白宦成
      白宦成
      09-23回复张雷@七洲
      试试看,因为如果换环境的话,数据库是不同的。
      09-23
      回复
    查看更多(1)
问题标签