【发布时间】: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