Javascript 如何让我的代码通过“setInterval”运行而不向用户发送垃圾邮件

Javascript 如何让我的代码通过“setInterval”运行而不向用户发送垃圾邮件,javascript,Javascript,我正在开发一个“提醒”应用程序&我想我已经完成了,但是我的问题是,当currentHour与medicTime警报启动时间匹配时,如何运行代码或继续查看数字,所以我尝试了setInterval和setTimeout,但这两种方法对我都不起作用(setTimeout不起作用,我必须重新加载页面&setInterval保持垃圾邮件)因此我想让代码看到页面内的数据并在没有垃圾邮件的情况下运行警报,该应用程序可能会每小时提醒用户一次,所以是的&同时我希望setInterval的数字较低,以防页面错误关闭

我正在开发一个“提醒”应用程序&我想我已经完成了,但是我的问题是,当
currentHour
medicTime
警报启动时间匹配时,如何运行代码或继续查看数字,所以我尝试了
setInterval
setTimeout
,但这两种方法对我都不起作用(setTimeout不起作用,我必须重新加载页面&setInterval保持垃圾邮件)因此我想让代码看到页面内的数据并在没有垃圾邮件的情况下运行警报,该应用程序可能会每小时提醒用户一次,所以是的&同时我希望
setInterval
的数字较低,以防页面错误关闭

// It's my dumb database so yeah do not worry about it
config = {
  apiKey: "AIzaSyBZHH97LQ42n7j0fBjKR7LCLXkeDq-L7iw",
  authDomain: "pro-core-169202.firebaseapp.com",
  databaseURL: "https://pro-core-169202.firebaseio.com",
  projectId: "pro-core-169202",
  storageBucket: "pro-core-169202.appspot.com",
  messagingSenderId: "58388231689"
};
firebase.initializeApp(config);

let dataRef = firebase.database().ref("data");

dataRef.on("child_added", snap => {
  let name = snap.child("name").val();
  let medicName = snap.child("medicName").val();
  let medicTime = snap.child("medicTime").val();
  let notes = snap.child("notes").val();

  $("#dataShow").append("<tr><td>" + "Name: " + name + "</td><td>" + "&nbsp;&nbsp;--&nbsp;&nbsp;" + " Medic Name: " + medicName + "</td><td>" + "&nbsp;&nbsp;--&nbsp;&nbsp;" + " Medic Time: " + medicTime + "</td><td>" + "&nbsp;&nbsp;--&nbsp;&nbsp;" + " Notes: " + notes + "<br>");

  let date = new Date();
  let currentHour = date.getHours();

  setTimeout(function () {
    if (medicTime == currentHour) {
      alert("it's " + medicName + " Time!" + "(It's " + medicTime + " Time!)");
    }
  }, 1)
})

let date = new Date();
  let currentHour = date.getHours();

  console.log(currentHour);
//这是我的愚蠢数据库,所以不用担心
配置={
apiKey:“AIzaSyBZHH97LQ42n7j0fBjKR7LCLXkeDq-L7iw”,
authDomain:“pro-core-169202.firebaseapp.com”,
数据库URL:“https://pro-core-169202.firebaseio.com",
projectId:“pro-core-169202”,
storageBucket:“pro-core-169202.appspot.com”,
messagingSenderId:“58388231689”
};
firebase.initializeApp(配置);
让dataRef=firebase.database().ref(“数据”);
dataRef.on(“添加的子对象”,快照=>{
让name=snap.child(“name”).val();
让medicName=snap.child(“medicName”).val();
让medicTime=snap.child(“medicTime”).val();
让notes=snap.child(“notes”).val();
$(“#dataShow”)。追加(“+”名称:“+Name+”+”--“+”医学名称:“+medicName+”+”--“+”医学时间:“+medicTime+”+”--“+”注释:“+Notes+”
”); 让日期=新日期(); 让currentHour=date.getHours(); setTimeout(函数(){ 如果(医疗时间==当前小时){ 警惕(“是“+medicName+”时间!”+“(是“+medicTime+”时间!)”; } }, 1) }) 让日期=新日期(); 让currentHour=date.getHours(); console.log(当前小时);
应在setTimeout回调中检查日期:

  setTimeout(function () {
    let date = new Date();
    let currentHour = date.getHours();
    if (medicTime == currentHour) {
      alert("it's " + medicName + " Time!" + "(It's " + medicTime + " Time!)");
    }
  }, 1)
本地存储支持的模拟代码
//这在代码段中不起作用,因为沙盒
$(“#测试”)。单击(
()=>localStorage.setItem('start',new Date().getTime())//1970年1月1日起的时间(毫秒)
)
检查时间=()=>{
//如果本地存储中未设置日期。。。
如果(!localStorage.getItem('start')){
clearInterval(myInterval);
}
const currentTime=new Date().getTime();
const startTime=localStorage.getItem('start');
如果(currentTime-startTime>60000){//如果超过60秒
clearInterval(myInterval);//取消注册间隔
警报('超时,60秒!');
}
}
//每秒钟检查一次
const myInterval=setInterval(checkTime,1000);


测试
我无法想象你会想检查计时器是否每毫秒点击一次的情况。也许当你轮询数据库时,你会想检查当前时间和警报之间的时间量,然后如果它大于或等于,抛出一个对话框,直到它被取消。你可以使用超时来补充这一点,b但我不会费心设置一个,除非它在一定范围内,因为人们很容易导航离开,等等。你需要更多地了解你在做什么。查看
setTimeout
alert
做什么,然后你就会明白为什么你会每毫秒弹出一个窗口。是的,如果我使用setInterval例如notify every hour&page closed,代码将不起作用&如果我使用setTimeout,代码将在刷新页面时运行,因此我需要介于两者之间的内容。问题在于,如果我使用setInterval,例如notify every hour&page closed,代码将不起作用&如果我使用setTimeout,代码将在刷新页面时运行,因此我需要介于两者之间的内容eentOk明白了。在本地存储中保存开始时间,当页面加载时,将当前日期()与本地存储中的日期()进行比较,这样您就可以在页面关闭时确定时间。有趣的,更多信息?@MosèRaguzzini