You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Socket.io断开事件中findRoomName函数返回null的问题排查

问题原因分析

你的findRoomName方法在disconnect事件中始终返回null,核心问题在于**forEach回调里的return无法终止整个方法的执行**:

当你在forEach的回调函数中写return val.name时,这个return只会结束当前单次的回调循环,不会让外层的findRoomName方法直接返回值。forEach会继续遍历Map里的下一个元素,直到所有元素遍历完成,最后方法会执行到末尾的return null,所以最终返回结果永远是null。

而你把逻辑直接嵌入disconnect事件时,不需要返回值,只是在遍历过程中执行移除用户的操作,所以能正常工作。

修复方案

把findRoomName里的forEach替换成可以中断循环并返回值的方式,比如for...of循环:

findRoomName(id) {
  for (const [key, val] of this.entries()) {
    if (val.players.has(id)) {
      return val.name;
    }
  }
  return null;
}

或者用Array.from结合find方法:

findRoomName(id) {
  const targetRoom = Array.from(this.values()).find(room => room.players.has(id));
  return targetRoom ? targetRoom.name : null;
}

这两种方式都能在找到匹配的房间后,立即返回房间名称,不会继续执行后续逻辑,确保方法返回正确结果。

内容的提问来源于stack exchange,提问作者Carmen Shannon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:10:52