【发布时间】:2014-04-17 02:29:11
【问题描述】:
这段代码摘录让我很难受。
_.forEach peerIds, (peerId) =>
console.log "connecting to peerId: #{ peerId }"
connection = peer.connect peerId
connection.on "error", (error) =>
alert error.type
connection.on "open", =>
console.log "connection to peerId #{ connection.peer } is open: #{ connection.open }"
@connections.push connection
@listenForMessage connection
这是我正在进行的 p2p 聊天的一部分。基本上它会遍历对等 ID 列表,为每个连接创建一个连接,并在它创建的每个连接上放置一个事件侦听器。
你看到的变量_ 是Lo-Dash。变量peer 是PeerJS。
如果我们假设peerIds 被设置为["y", "z"],下面是相当有趣的控制台输出:
peerIds: y,z
连接到 peerId: y
连接到 peerId: z
与 peerId z 的连接已打开:false
与 peerId z 的连接已打开:true
为什么事件open 被调用两次,连接属于对等z?我不可能从循环内部更改peerIds,对吧?
我需要以某种方式使这个运行同步(没有 a)或者在异步时简单地正确。
预期输出:
peerIds: y,z
连接到 peerId: y
连接到 peerId: z
与 peerId y 的连接已打开:true
与 peerId z 的连接已打开:true
【问题讨论】:
标签: javascript loops events asynchronous coffeescript