问题描述
WSClient.start() 声明为 async,但内部调用 reConnect(true) 时没有await,导致 start() 立即 resolve —— 此时 WebSocket连接实际上尚未建立。
reConnect(isStart = true) 本身是 async 函数,内部会 tryConnect()等待连接建立,连接成功后才打印 ws client ready,在此之前飞书发过来的数据都收不到,开发者想判断真的连接成功了再处理自己的逻辑,目前只能通过看日志[info]: [ '[ws]', 'ws client ready' ]。
但是不知道出于什么原因考虑吗?start() 没有 await它也没有将他的promise返回出去,导致start() 目前返回的 Promise 在连接就绪之前就已经 resolve。
影响
所有 await wsClient.start(...) 的调用方都会在 WebSocket实际连接建立之前继续执行:
await wsClient.start({ eventDispatcher: ... }); // ← 此时 WebSocket 连接尚未建立 // 在此之后发送的消息可能丢失
期望行为
await wsClient.start(...) 应在 WebSocket 连接真正就绪后才 resolve。希望再外部开发者自己能感知和处理ws client ready的状态
建议
await this.reConnect(true);或者return出去,让开发者获取到promise真正状态
版本
@larksuiteoapi/node-sdk: 1.60.0
问题描述
WSClient.start() 声明为 async,但内部调用 reConnect(true) 时没有await,导致 start() 立即 resolve —— 此时 WebSocket连接实际上尚未建立。
reConnect(isStart = true) 本身是 async 函数,内部会 tryConnect()等待连接建立,连接成功后才打印 ws client ready,在此之前飞书发过来的数据都收不到,开发者想判断真的连接成功了再处理自己的逻辑,目前只能通过看日志[info]: [ '[ws]', 'ws client ready' ]。
但是不知道出于什么原因考虑吗?start() 没有 await它也没有将他的promise返回出去,导致start() 目前返回的 Promise 在连接就绪之前就已经 resolve。
影响
所有 await wsClient.start(...) 的调用方都会在 WebSocket实际连接建立之前继续执行:
await wsClient.start({ eventDispatcher: ... }); // ← 此时 WebSocket 连接尚未建立 // 在此之后发送的消息可能丢失期望行为
await wsClient.start(...) 应在 WebSocket 连接真正就绪后才 resolve。希望再外部开发者自己能感知和处理ws client ready的状态
建议
await this.reConnect(true);或者return出去,让开发者获取到promise真正状态
版本
@larksuiteoapi/node-sdk: 1.60.0