吐槽下:标题一定要有问号感觉有点蠢啊。。。
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);
// 业务代码,就忽略啦 。启动失败的话,做重试
// .....
}
似乎不是移动端的报错~是PC端的,PC端的watch目前应该是不支持
开发环境,搞不出这个错误。暂时只有生产有点点量的时候能观察到