gpt4 book ai didi

javascript - 找到 setTimeout() 中剩余的时间?

转载 作者:IT王子 更新时间:2023-10-29 02:46:28 25 4
gpt4 key购买 nike

我正在编写一些与库代码交互的 Javascript,这些库代码不属于我,也不能(合理地)更改。它创建用于显示一系列限时问题中的下一个问题的 Javascript 超时。这不是真正的代码,因为它被混淆得超出了所有希望。这是图书馆正在做的事情:

....
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = setTimeout( showNextQuestion(questions[i+1]), t );

我想通过询问由 setTimeout 创建的计时器,在屏幕上放置一个进度条,填充到 questionTime * 1000。唯一的问题是,似乎没有办法做到这一点。我是否缺少 getTimeout 函数?我能找到的有关 Javascript 超时的唯一信息仅与通过 setTimeout( function, time) 创建和通过 clearTimeout( id ) 删除有关。

我正在寻找一个函数,该函数返回超时触发前的剩余时间,或调用超时后耗时。我的进度条代码如下所示:

var  timeleft = getTimeout( test.currentTimeout ); // I don't know how to do this
var $bar = $('.control .bar');
while ( timeleft > 1 ) {
$bar.width(timeleft / test.defaultQuestionTime * 1000);
}

tl;dr:如何找到 javascript setTimeout() 之前的剩余时间?


这是我现在使用的解决方案。我浏览了负责测试的库部分,并解读了代码(很糟糕,并且违反了我的权限)。

// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = mySetTimeout( showNextQuestion(questions[i+1]), t );

这是我的代码:

// wrapper for setTimeoutfunction mySetTimeout( func, timeout ) {    timeouts[ n = setTimeout( func, timeout ) ] = {        start: new Date().getTime(),        end: new Date().getTime() + timeout        t: timeout    }    return n;}

这在任何非 IE 6 的浏览器中都非常有效。即使是原始的 iPhone,我希望事情变得异步。

最佳答案

仅作记录,有一种方法可以在 node.js 中获取剩余时间:

var timeout = setTimeout(function() {}, 3600 * 1000);

setInterval(function() {
console.log('Time left: '+getTimeLeft(timeout)+'s');
}, 2000);

function getTimeLeft(timeout) {
return Math.ceil((timeout._idleStart + timeout._idleTimeout - Date.now()) / 1000);
}

打印:

$ node test.js 
Time left: 3599s
Time left: 3597s
Time left: 3595s
Time left: 3593s

这似乎在 firefox 中不起作用,但由于 node.js 是 javascript,我认为这句话可能对寻找节点解决方案的人有所帮助。

关于javascript - 找到 setTimeout() 中剩余的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3144711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com