云开发数据库的Watch总有错误似乎无法处理,“initWatchFail”,有人知道么?
发布于 6 年前 作者 gang34 11811 次浏览 来自 官方Issues

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

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);

     // 业务代码,就忽略啦 。启动失败的话,做重试
     // .....
}
1 回复

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

回到顶部