如何创建超时

Posted

技术标签:

【中文标题】如何创建超时【英文标题】:How can Create timedown 【发布时间】:2021-11-23 03:23:58 【问题描述】:

我想用 mongoose 创建一个计时器,并在时间结束时激发一个函数。 我有一个测验,我想在时间结束时从测验页面注销。用nodejs实现的代码

【问题讨论】:

【参考方案1】:

你可以试试这个:

// Set the date we're counting down to
var countDownDate = new Date("Jan 5, 2022 15:37:25").getTime();

// Update the count down every 1 second
var x = setInterval(function() 

  // Get today's date and time
  var now = new Date().getTime();

  // Find the distance between now and the count down date
  var distance = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Display the result in the element with id="demo"
  document.getElementById("demo").innerhtml = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";

  // If the count down is finished, write some text
  if (distance < 0) 
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  
, 1000);
&lt;p id="demo"&gt;&lt;/p&gt;

这是 js/dom 的 js 超时示例。 并且您可以通过任何您想要的 var 轻松更改 document.getElementById()。

【讨论】:

【参考方案2】:

我会说创建一个令牌 (jwt),包括在服务器上开始测验的时间戳、user_id 和 quiz_id,并将其传递给客户端应用程序。然后你可以使用原生js函数setInterval()在ejs应用程序本身中勾选计时器,并在计时器时间到达测验到期时间时自动触发退出测验页面。

对于每个答案提交,您可以将测验开始时创建的令牌与提交详细信息一起传递给服务器,以便服务器可以验证该令牌是否仍然有效使用(基于测验到期时间)。因此,到时间到期时,服务器将不再接受该特定测验的答案,因为令牌已过期。

您可以根据需要包含业务逻辑,这是针对您的通用问题的更通用的答案。 (这可能不是实现测验的最佳方式,但它适用于最少的服务器请求。)

【讨论】:

以上是关于如何创建超时的主要内容,如果未能解决你的问题,请参考以下文章

如何正确设置浏览器创建的桌面通知的无限超时

如何正确设置浏览器创建的桌面通知的关闭超时

如何使用超时创建 boost::async_read 和 async_write

一直在使用 React,如何设置超时或创建一个类似于每隔几分钟显示来自 graphql api 的新数据的数据轮播?

无论如何都超过了摩卡超时

如何创建慢视图?