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

如何在运行时更新PeerJS数据处理程序的回调函数?

PeerJS 运行时更新data回调函数的正确方法

你之前的写法无效,核心原因是:每次创建的箭头函数都是全新的函数引用,connection.off()无法匹配到之前绑定的匿名函数,自然没办法移除旧回调。

下面是两种可行的解决方法:

方法一:使用具名函数作为回调

把匿名箭头函数换成具名函数,这样绑定和移除时用的是同一个函数引用,就能正确匹配:

// 定义具名处理函数
function handlePeerData(data, connection) {
  peerOnDataHandler(data, connection);
}

// 初始绑定回调
connection.on('data', handlePeerData);

// 需要更新时,先移除旧回调再重新绑定
connection.off('data', handlePeerData);
connection.on('data', handlePeerData);

因为handlePeerData是固定的引用,每次调用它时都会使用最新的peerOnDataHandler,所以状态更新后重新绑定就能生效。

方法二:用闭包直接获取最新状态

如果不想频繁手动移除/绑定回调,可以让回调依赖外部的状态变量,这样每次触发事件时都会自动拿到最新状态,不需要更新回调本身:

// 假设你的动态状态存在这个变量里
let peerHandlerState = {/* 初始状态 */};

// 只绑定一次回调
connection.on('data', (data, connection) => {
  // 直接使用最新的peerHandlerState
  peerOnDataHandler(data, connection, peerHandlerState);
});

// 后续只需要更新状态变量即可,回调会自动用新值
peerHandlerState = {/* 更新后的状态 */};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:12:10