是否可以在javascript中实现等效的setTimeout()?

时间:2016-11-09 14:33:52

标签: javascript time settimeout

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

function setTimeout(callback, time_in_ms)
{
    // Implementation of time elapse of time_in_ms
    callback();
}

我出于好奇而问这个问题。一个简单的"不,这是不可能的" 也足以回答这个问题。

2 个答案:

答案 0 :(得分:5)

  

我可以自己在javascript中实现def reportItems(self): l = self.listWidget dy = l.item(0).font().pointSize() ystart = l.viewport().geometry().y() h = l.viewport().geometry().height() print ystart, h, dy itlist = [] itcomplist = [] for y in range(ystart, ystart+h, (29/8)*dy): #empirical value i = l.itemAt(0, y) if not i in itlist: itlist.append(i) itcomplist.append((y, l.row(i))) for it in itcomplist: y, i = it print y, l.item(i).text()[:30] 吗?

不 - 没有其他一些本机异步API。您可以使用setTimeout(),网络工作者setInterval或实际上与requestAnimationFrame在同一事件循环中运行的任何内容来实现它。但如果有一个原因导致您无法使用内置setTimeout,那么您的环境可能还存在其他问题 - 因此具体情况取决于具体情况。

答案 1 :(得分:1)

同步(非异步)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);
&#13;
&#13;
&#13;

但是,作为Bergi mentioned,您可能需要一个异步API来避免拖延浏览器的JavaScript执行。

Worker具有多线程功能以允许此功能,具有myWorker.port.start()myWorker.terminate()等功能...我从未需要使用Workers或类似API创建内容,但是也许你可以在这个领域多研究一下(如果是这样的话我也不应该完成你的作业)。