2014-04-16 117 views
0

我對代碼的這段摘錄很難。循環中的事件監聽器

_.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。變量peerPeerJS

如果我們假設peerIds設置爲["y", "z"],這裏是相當有趣的控制檯輸出:

peerIds:Y,Z

連接的peerID:Y

連接的peerID:

連接到peerId z是開放的:false

連接的peerID z是開放的:真正的

爲什麼事件open與屬於同行z連接兩次叫什麼名字?我無法從內部循環中更改peerIds,對吧?

我以某種方式需要使這個運行同步(沒有)或者只是在異步時正確。

預期輸出:

peerIds:Y,Z

連接到的peerID:Y

連接到的peerID位:Z

連接的peerID y是開放:真

與peerId的連接z已打開:true

回答

1

關閉!另外,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