【问题标题】:Event listeners in loop循环中的事件监听器
【发布时间】: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。变量peerPeerJS

如果我们假设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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多