2014-11-11 2 views
0

Как я могу остановить setInterval в моем скрипте? Alert working, clearInterval нет, и в консоли нет никаких ошибок.Остановка setInterval в coffeescript

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() 

ответ

2

setInterval возвращает новый таймер ID каждый раз, когда вы называете его, и вы передаете этот идентификатор clearInterval, чтобы остановить этот конкретный таймер. Так что, когда вы это делаете:

clearInterval order.start_poll() 

вы только начинаете новый таймер и немедленно остановить его, это не будет иметь никакого влияния вообще на других таймеров.

Вы должны хранить идентификатор, так что вы можете отменить его позже:

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

Вы можете добавить @stop_polling() вызова в верхней части start_poll тоже. Это не обязательно, но это не может повредить, и это поможет предотвратить будущие ошибки, если вы решите изменить способ взаимодействия с опросом.

+0

большое спасибо, я потратил много времени на 'clearInterval' – user3832640

Смежные вопросы