我有以下示例:
var first=setInterval(function() {
var t=new Date();
console.log("Started: ",t);
sleep(function(){
var t=new Date();
console.log("Finished: ",t);
});
},500);
function sleep(callback){
for (var i=0;i<10000000000;i++){
//waiting
}
callback();
}
恕我直言睡眠应该异步执行,但它不会输出:
Started: Mon Mar 04 2013 12:31:10 GMT+0200 (EET)
Finished: Mon Mar 04 2013 12:31:23 GMT+0200 (EET)
Started: Mon Mar 04 2013 12:31:24 GMT+0200 (EET)
Finished: Mon Mar 04 2013 12:31:36 GMT+0200 (EET)
Started: Mon Mar 04 2013 12:31:36 GMT+0200 (EET)
答案 0 :(得分:1)
setInterval
将不会触发对回调的下一次调用。由于您的sleep
函数绝不是异步的,因此它会阻止后续setInterval
次回调。
在浏览器中,除非使用web workers,否则所有JavaScript代码都在单线程上执行。看起来您的代码正在尝试设置将运行sleep
的情况,然后将触发setInterval
的后续回调并启动第二个运行sleep
的线程。这种情况不会发生(见上文)。
你可以使用网络工作者做类似的事情,但是,如果你有长期运行的操作,你想要运行主JavaScript线程(在browsers that support them上)。