JavaScript中的Sleep和Interrupt替代品

时间:2014-01-08 20:25:55

标签: javascript sleep interrupt

好的,我一直在寻找解决这个问题,但由于JavaScript是单线程的,我不确定它是否可能。你们知道是否有其他选择吗?

这是我想要完成的事情:

我正在制作十个异步请求以从服务器获取数据。一旦收到所有十个响应,或者经过4000毫秒后,我想继续执行我的逻辑。

如果我使用java,我可以简单地触发十个不同的线程并让我的主线程休眠。一旦收到所有十个响应或经过了4000毫秒,我就可以中断线程并继续执行。我只是不知道如何在JavaScript中执行此操作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在我的例子中,我每隔100毫秒激活Do(),最多10次......这是非常基本的。

var _timeoutExpired = false;
var _count = 0;

function Do() {

   window.clearInterval( intr);

   if ( _timeoutExpired == false )
   {
   ... your code..
   }
   else{
       window.clearInterval( intr);
       return;
   }

   _count++; 
   if ( _count == 10 ) {
       window.clearInterval( intr);
   }
   else{
       intr = window.setInterval(Do,100 );
   }
}
function Timeout() {  _timeoutExpired = true; }

var  intr = window.setInterval(Do,100 );
window.setTimeout(Timeout,4000);

答案 1 :(得分:0)

只是喜欢

var responses = [],
    handleResponses = true;

function do_ajax_calls(){
   //do you ajax calls here and call ajax_callback as their callback
}

function ajax_callback(response){
   if (!handleResponses) return;

   responses.push(response)
   if (responses.length == 10){
       final_callback()
   }       
}

function final_callback(){
   handleResponses = false;
   //do whatever with the existing responses here
}

setTimeout(function(){
   final_callback();
}, 4000)