收藏
回答

云开发数据库的Watch总有错误似乎无法处理,“initWatchFail”,有人知道么?

吐槽下:标题一定要有问号感觉有点蠢啊。。。

Anyway,一个小程序用到了云开发数据库的watch功能,但是上线后一直会在业务高峰期(其实没多少)收到` current state (CLOSED) does not accept "initWatchFail"`报错。


感觉这个错误好像不能被业务代码处理抓住。 我们在`onError`和`watch`都试图去处理,也上了实时日志。目前还是没有头绪,感觉抓不住。实时日志只看到onError的,看不到其他,但是又收到报错。


搞不清楚是报错残存的旧版本问题(报警群有,但是查错误日志又没有,看不出版本),还是说其他原因。


代码片段:


// 下面的包装的watch
function  ourWatch(id, funcs) {
    return db.collection("certificates").where({
      _id: id,
      _openid: '{openid}'
            }).watch(funcs);
}

// 开启监听
try {
  this.certDbChangeWatcher = ourWatch(this.data.certificate._id, {
      onChange: (snapshot) => {
         if (snapshot.type == "init"return;
          // 业务代码,就忽略啦 
          // .....
   },
   onError: (err) => {
     console.error("Watch certificate change error", err, this.data.certificate);
     if (rtLogger) rtLogger.error("Watch certificate change error -- " +  this.pureData.watchRetriedCount, err, this.data.certificate);
     this.stopDbCertificateChangeWatcher();

          // 业务代码,就忽略啦 。onError的话,做重试
          // .....catch (watchStartErr) {
  console.error("Watch certificate change start failed", watchStartErr, this.data.certificate);
  if (rtLogger) rtLogger.error("Watch certificate change start error -- " +  this.pureData.watchRetriedCount, watchStartErr, this.data.certificate);

     // 业务代码,就忽略啦 。启动失败的话,做重试
     // .....
}
回答关注问题邀请回答
收藏

2 个回答

  • 卢索
    卢索
    2021-04-13

    似乎不是移动端的报错~是PC端的,PC端的watch目前应该是不支持

    2021-04-13
    有用
    回复
  • jeff
    jeff
    2021-02-04

    开发环境,搞不出这个错误。暂时只有生产有点点量的时候能观察到

    2021-02-04
    有用
    回复
登录 后发表内容
问题标签