I have a countdown function to run every second, so I suggested setInterval() . After I switched to another template, the interval function continues to work. How to destroy it onDestroyed() . The code below will help you understand well.
<template name="Home"> <h4>{{timeremaining}}</h4> </template> Template.Home.helpers({ timeremaining : function(){ return Session.get('timeremaining'); } }); Template.Home.onRendered(function () { // time functions begin var end_date = new Date(1476337380000); // I am getting timestamp from the db. var run_every_sec = setInterval(function () { var current_date = new Date(); var remaining = end_date.getTime() - current_date.getTime(); var oneDay = 24*60*60*1000; var diffDays = Math.round(Math.abs(remaining/oneDay)); console.log(remaining); // am getting this log in every template. if (remaining > 0) { //set remaining timeLeft Session.set('timeremaining',diffDays + ' Days ' + (Math.abs(end_date.getHours()-current_date.getHours())).toString() + ' Hrs ' + (Math.abs(end_date.getMinutes()-current_date.getMinutes())).toString() + ' Min ' + (60 - end_date.getSeconds()-current_date.getSeconds()).toString() + ' Sec ') } else { clearInterval(run_every_sec); } }, 1000); //time functions end }.bind(this)); Template.Home.onDestroyed(function () { clearInterval(run_every_sec); // Here I cant remove this time interval });
We can declare run_every_sec global function. If so, how to get through end_date . I donβt think its wise idea to declare end_date inside run_every_sec , because its exit from db.
source share