如何在运行时更新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
相关产品推荐
相关产品推荐

