如何创建超时
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);
<p id="demo"></p>
这是 js/dom 的 js 超时示例。 并且您可以通过任何您想要的 var 轻松更改 document.getElementById()。
【讨论】:
【参考方案2】:我会说创建一个令牌 (jwt),包括在服务器上开始测验的时间戳、user_id 和 quiz_id,并将其传递给客户端应用程序。然后你可以使用原生js函数setInterval()
在ejs应用程序本身中勾选计时器,并在计时器时间到达测验到期时间时自动触发退出测验页面。
对于每个答案提交,您可以将测验开始时创建的令牌与提交详细信息一起传递给服务器,以便服务器可以验证该令牌是否仍然有效使用(基于测验到期时间)。因此,到时间到期时,服务器将不再接受该特定测验的答案,因为令牌已过期。
您可以根据需要包含业务逻辑,这是针对您的通用问题的更通用的答案。 (这可能不是实现测验的最佳方式,但它适用于最少的服务器请求。)
【讨论】:
以上是关于如何创建超时的主要内容,如果未能解决你的问题,请参考以下文章
如何使用超时创建 boost::async_read 和 async_write