在coffeescript中停止setInterval

如何在脚本中停止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() 

每次调用它时, 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的顶部。 这不是必要的,但它不会受到伤害,如果您决定改变与轮询交互的方式,它将有助于防止未来的错误。