Javascript异步函数不工作
我有以下例子:Javascript异步函数不工作,javascript,asynchronous,Javascript,Asynchronous,我有以下例子: 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
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();
}
setInterval
在上一次回调调用仍在运行时,不会触发下一次回调调用。由于您的sleep
函数绝不是异步的,因此它会阻塞后续的setInterval
回调
在浏览器中,除非使用,否则所有JavaScript代码都在单个线程上执行。看起来您的代码正在尝试设置一种情况,即sleep
将运行,然后将触发setInterval
的后续回调,并启动运行sleep
的第二个线程。但事实并非如此(见上文)
但是,如果您有长时间运行的操作,您可以使用web workers执行类似的操作,您希望在主JavaScript线程(on)下运行这些操作。“IMHO睡眠应该异步执行”为什么?您没有做任何事情使其异步。(也就是说,在
setInterval
回调中)您对JavaScript如何处理线程的认识是错误的。所有代码都在单个线程上执行,来自异步操作的回调必须等待线程变为空闲,然后才能自行执行。
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)