puppet-padlocal
puppet-padlocal copied to clipboard
如何正确地处理底层RPC通信带来的异常情况?
比如我们用临时的token测试的过程中,发现 在TOKEN过期情况下,bot 启动的时候底层会抛错,但是BOT并不会停下来,会一直反复重试抛错 如下:
17:25:08 ERR [Request] [tid:a464bc97], padlocal grpc request failed: 1, error: Error: 16 UNAUTHENTICATED: Token is expired
17:25:08 ERR start client failed: VError: [tid:a464bc97] request has been cancelled for reason: SERVER_ERROR: 16 UNAUTHENTICATED: Token is expired
at Request._failAllPendingRequest (D:\src\robot-manager\[email protected]@padlocal-client-ts\src\Request.ts:338:15)
at ClientDuplexStreamImpl.
我们代码中的异常捕捉逻辑似乎没有生效,下面会打印出'启动成功':
bot.start().then(() => { log.info('启动成功') }).catch((error: any) => { log.error('-------------------------->>>> Bot start failed'); // 不会被回调执行 })
而这种情况下,bot的stop接口也没有把底层的请求循环停止: ` await neilBot?.weixinBot.stop()
log.info('--------------->Bot stopped') // 正常打印但是rpc的错误会持续 `
在puppet-padlocal.ts中 https://github.com/wechaty/puppet-padlocal/blob/fe1c768e4955f5845e04e1bf484aa18c0b5cfbd4/src/puppet-padlocal.ts#L222 在异常情况下都会重试登录操作。 是不是可以区分一下具体的异常,比如这种token过期,或者网络异常的时候,重试是没有意义的。