Open shiyeling opened 1 year ago
比如我们用临时的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\node_modules_padlocal-client-ts@0.5.3@padlocal-client-ts\src\Request.ts:338:15) at ClientDuplexStreamImpl. (D:\src\robot-manager\node_modules_padlocal-client-ts@0.5.3@padlocal-client-ts\src\Request.ts:82:12) at ClientDuplexStreamImpl.emit (node:events:513:28) at ClientDuplexStreamImpl.emit (node:domain:489:12) at Object.onReceiveStatus (D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\client.ts:692:18) at Object.onReceiveStatus (D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\client-interceptors.ts:417:48) at D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\resolving-call.ts:111:24 at processTicksAndRejections (node:internal/process/task_queues:77:11) 17:25:08 ERR [Request] [tid:dabe7392], padlocal grpc request failed: 1, error: Error: 16 UNAUTHENTICATED: Token is expired
我们代码中的异常捕捉逻辑似乎没有生效,下面会打印出'启动成功': bot.start().then(() => { log.info('启动成功') }).catch((error: any) => { log.error('-------------------------->>>> Bot start failed'); // 不会被回调执行 })
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过期,或者网络异常的时候,重试是没有意义的。
比如我们用临时的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\node_modules_padlocal-client-ts@0.5.3@padlocal-client-ts\src\Request.ts:338:15) at ClientDuplexStreamImpl. (D:\src\robot-manager\node_modules_padlocal-client-ts@0.5.3@padlocal-client-ts\src\Request.ts:82:12)
at ClientDuplexStreamImpl.emit (node:events:513:28)
at ClientDuplexStreamImpl.emit (node:domain:489:12)
at Object.onReceiveStatus (D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\client.ts:692:18)
at Object.onReceiveStatus (D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\client-interceptors.ts:417:48)
at D:\src\robot-manager\nodemodules\@grpc_grpc-js@1.8.13@@grpc\grpc-js\src\resolving-call.ts:111:24
at processTicksAndRejections (node:internal/process/task_queues:77:11)
17:25:08 ERR [Request] [tid:dabe7392], padlocal grpc request failed: 1, error: Error: 16 UNAUTHENTICATED: Token is expired
我们代码中的异常捕捉逻辑似乎没有生效,下面会打印出'启动成功':
bot.start().then(() => { log.info('启动成功') }).catch((error: any) => { log.error('-------------------------->>>> Bot start failed'); // 不会被回调执行 })
而这种情况下,bot的stop接口也没有把底层的请求循环停止: ` await neilBot?.weixinBot.stop()
log.info('--------------->Bot stopped') // 正常打印但是rpc的错误会持续 `