2016-02-01 2 views
0

У меня возникла проблема с моим счетчиком. Я не знаю, почему, но clearInterval (timeinterval) не срабатывает. Если я поставлю оператор console.log для t, он будет равен -1, -2 и т. Д., Почему не останавливается счетчик?Как очистить Timeinterval

Template.decision.onRendered(function(){ 
    timeinterval = setInterval(function() { 
    var endtime = '2016/02/10'  
     Meteor.call("getCurrentTime", function (error, result) { 
     Session.set("time", result); 
     var t = getTimeRemaining(endtime); 
     Session.set("t", t); 
     }); 
    }, 1000); 
    }); 

    function getTimeRemaining(endtime){ 
    var t = Date.parse(endtime) - Session.get('time'); 
    var seconds = ("0" + Math.floor((t/1000) % 60)).slice(-2); 
    var minutes = ("0" + Math.floor((t/1000/60) % 60)).slice(-2); 
    var hours = ("0" + Math.floor((t/(1000*60*60)) % 24)).slice(-2); 
    var days = Math.floor(t/(1000*60*60*24)); 
    console.log(t); 

    if(t <= 0) { 
     clearInterval(timeinterval); 
    } 
return { 
    'total': t, 
    'days': days, 
    'hours': hours, 
    'minutes': minutes, 
    'seconds': seconds 
}; 
} 

И на моем сервере:

Meteor.methods({ 
    'getCurrentTime': function(){ 
     return Date.parse(new Date()); 
    } 
    }); 
+1

Как быстро догадаться, я бы сказал, что 'timeinterval' находится не в том же объеме ... вы пробовали консоль log? – Simone

ответ

1
if(t <= 0 && timeinterval) { 
    clearInterval(timeinterval); 
} 

Чтобы не иметь повторяющиеся таймеры, либо вы можете отменить предыдущий интервал в линии, прежде чем устанавливать новый таймер, или вы можете сделать :

if (!timeinterval) { 
    timeinterval = setInterval(function() { 
     timeinterval = null; 
    }, delay); 
} 

Но это может быть сложно, если у вас есть параллелизм.

+0

еще один вопрос к этому обратному отсчету ... Если я нахожусь на визуализированной странице, когда все будет хорошо, но если я нахожусь на странице больше, то раз обратный отсчет дублируется .. Не могли бы вы рассказать мне, как таймер обратного отсчета можно было только однажды вызвать? – decisionMaker

+0

Да, спасибо, что сделал это для меня. Теперь последний вопрос к этому обратному отсчету. Я пытался отправить электронные письма некоторым людям, которых я вставлял в свою коллекцию раньше, когда счетчик истекает '(t <= 0)'. Проблема заключается только в том, что он запускается, когда я посещаю страницу. Возможно ли, что сервер отправляет электронные письма, когда даже на стороне клиента нет? Я сделал что-то вроде этого: «Meteor.call ('sendEmail', to, url, questionText);' – decisionMaker

+0

, когда вы вычисляете 't', устанавливаете еще один таймер, который срабатывает, когда он истекает – Gavriel

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