是否可以在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创建一些东西,但也许您可以在这个领域进行更多的研究(如果是这种情况,我也不应该完成您的作业)。