Javascript 循环中的事件侦听器
我很难理解这段代码的摘录Javascript 循环中的事件侦听器,javascript,loops,events,asynchronous,coffeescript,Javascript,Loops,Events,Asynchronous,Coffeescript,我很难理解这段代码的摘录 _.forEach peerIds, (peerId) => console.log "connecting to peerId: #{ peerId }" connection = peer.connect peerId connection.on "error", (error) => alert error.type connection.on "open", => con
_.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列表,为每个ID创建一个连接,并在创建的每个连接上放置一个事件侦听器
您看到的变量\
是。变量peer
为
如果我们假设peerIds
被设置为[“y”,“z”]
,下面是非常有趣的控制台输出:
皮瑞兹:是的,是的
正在连接到peerId:y
连接到peerId:z
与peerId z的连接已打开:false
与peerId z的连接已打开:true
为什么对属于对等方z
的连接调用两次事件open
?我不可能从内部循环中更改peerIds
,对吗
我需要以某种方式使此运行同步(不带a)或在异步时简单地更正
预期产出:
皮瑞兹:是的,是的
正在连接到peerId:y
连接到peerId:z
与peerId y的连接已打开:true
与peerId z的连接已打开:true
闭嘴!此外,CoffeeScript还为其提供了关键字
do
_.forEach peerIds, (peerId) =>
connection = peer.connect peerId
do (connection) =>
connection.on "error", (error) ->
alert error.type
connection.on "open", =>
@connections.push connection
@listenForMessage connection