Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript异步函数不工作_Javascript_Asynchronous - Fatal编程技术网

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)