是否有可能在javascript中实现setTimeout()的等效物?



是否可以在JavaScript中实现相当于setTimeout()的函数?如果有,最好的方法是什么?

function setTimeout(callback, time_in_ms)
{
    // Implementation of time elapse of time_in_ms
    callback();
}
我问这个问题是出于好奇。一个简单的"No, it is not possible"也足以回答这个问题。

我可以实现setTimeout()在javascript自己吗?

没有-没有其他本地异步API。你可能能够在setInterval方面实现它,与网络工作者,requestAnimationFrame或真正的任何东西运行在相同的事件循环作为setTimeout将。但是,如果有一个原因阻止您使用内置的setTimeout,则可能还有您的环境中的其他问题-因此,这取决于具体情况。

一个同步的(非异步的)setTimeout等价的东西是这样的:

function myTimeout(fun, milisecs) {
    var nowT = Date.now();
    while(Date.now()< nowT+milisecs){
      continue;
    }
    fun();
}
function consout() {
     console.log('The future arrived now!');
}
myTimeout(consout,2000);

然而,正如Bergi提到的,你可能需要一个异步API来避免浏览器的JavaScript执行停滞。

Worker具有多线程功能来允许此操作,例如myWorker.port.start()myWorker.terminate()…我从来没有需要使用Workers或类似的api创建一些东西,但也许您可以在这个领域进行更多的研究(如果是这种情况,我也不应该完成您的作业)。

相关内容

最新更新