Skip to content

WSClient.start() 在 WebSocket 连接就绪前就已 resolve #183

@brandnewboy

Description

@brandnewboy

问题描述

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions