2016-02-01 86 views
0

我遇到了我的櫃檯問題。我不知道爲什麼,但clearInterval(timeinterval)不會觸發。如果我把一個console.log語句爲-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'不在同一個範圍內......你有沒有嘗試過'console.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