在coffeescript中停止setInterval

时间:2014-11-11 18:37:09

标签: jquery coffeescript clearinterval

如何在脚本中停止setInterval?警报工作,clearInterval没有,并且控制台中没有任何错误。

order =  
  start_poll: ->
    interval = setInterval(@request, 60000)
  stop_polling: ->
    clearInterval order.start_poll()
    alert ('expired')
  request: ->
    id = $('#status_id').attr('data-id')
    $.get "/orders/#{id}", (data) ->
      console.log("#{data.status}")
      if data.status is 'expired'
        order.stop_polling()


$ ->
  order.start_poll()

1 个答案:

答案 0 :(得分:2)

每次调用它时,

setInterval都会返回一个新的计时器ID,并且您传递该标识clearInterval以停止该特定计时器。所以当你这样做时:

clearInterval order.start_poll()

你只是开始一个新的计时器并立即停止它,这对其他计时器没有任何影响。

您需要存储ID,以便以后取消:

order =  
  start_poll: ->
    @interval = setInterval(@request, 60000)
  stop_polling: ->
    clearInterval(@interval) if(@interval)
    alert('expired')
  #...

您可能还希望在@stop_polling()的顶部添加start_poll来电。这不是必要的,但如果您决定改变与投票的互动方式,它可以帮助防止未来的错误。