【问题标题】:Coffeescript : setInterval, clearInterval and anonymous functionCoffeescript:setInterval、clearInterval 和匿名函数
【发布时间】:2013-09-02 15:39:18
【问题描述】:

我在一个匿名函数中使用 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()

【问题讨论】:

  • 这看起来像是一个范围界定问题。我怀疑您的浏览器控制台中存在“未定义不是函数”错误,因为clearLoops 不在您尝试调用它的范围内。
  • 我可以调用clearLoops,但intervalID 始终等于-1,除非它调用setInterval 循环。我认为这也是一个范围问题,也许 socket.io 的匿名函数是有罪的?

标签: javascript coffeescript scope closures setinterval


【解决方案1】:

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

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

应该是

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

提示:http://coffeescript.org 的“试用 CoffeeScript”功能有一个内置的语法检查器,您可以使用它在代码 sn-ps 未按预期工作时再次检查它们。

【讨论】:

  • 抱歉,发帖前的代码审查很糟糕。我检查了我的文件,有逗号。我编辑了帖子。
猜你喜欢
  • 2022-01-06
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多