Coffeescript:setInterval,clearInterval和匿名函数

时间:2013-09-02 15:39:19

标签: javascript coffeescript scope closures setinterval

我将setInterval()用于匿名函数,我想在另一个匿名函数中使用clearInterval()。我正在使用socket.io,我需要为每个套接字都有intervalID,所以我不能使用全局变量。

当clearLoops()被触发到setInterval循环中时,我可以clearInterval,但它在我的其他套接字事件中不起作用。

io.sockets.on 'connection', (socket) ->
  intervalID = -1

  clearLoops = ->
     if intervalID != -1
       clearInterval intervalID
       intervalID = -1

  socket.on 'first:action', (data, callback) ->
    myArray = data
    setTimeout(->
      intervalID = setInterval(->
        arrLength = myArray.length
        if arrLength is 0
          clearLoops()
        while i < arrLength
          if myArray[i].score >= MAX_SCORE
            myArray.splice i, 1
            i--
            arrLength--
          i++
      , 300)
    , 3000)


  socket.on 'second:action', ->
    clearLoops()


  socket.on 'disconnect', ->
    clearLoops()

1 个答案:

答案 0 :(得分:1)

您的代码在语法上无效。第9行缺少参数之间的逗号:

 socket.on 'first:action' (data, callback) ->

应该是

 socket.on 'first:action', (data, callback) ->

提示:http://coffeescript.org的“Try CoffeeScript”功能有一个内置的语法检查程序,您可以使用它来仔细检查代码段,因为它们没有按预期工作。