Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
AngularJS会等待许多$timeout完成_Angularjs - Fatal编程技术网

AngularJS会等待许多$timeout完成

AngularJS会等待许多$timeout完成,angularjs,Angularjs,如何等待直到所有AngularJS的超时完成 for (var i = 0; i < 1000; i++) { $timeout(function () { //do sth }, 100); }; //then do something else is all $timeouts are done for(变量i=0;i

如何等待直到所有AngularJS的超时完成

for (var i = 0; i < 1000; i++) {
   $timeout(function () {
      //do sth
   }, 100);
};

//then do something else is all $timeouts are done
for(变量i=0;i<1000;i++){
$timeout(函数(){
//做某事
}, 100);
};
//然后做些别的事情,所有的$timeout都完成了

您可以使用超时返回的承诺,并结合
$q.all
(inject)实现这一点

例如:-

var promises = [];

for (var i = 0; i < 1000; i++) {
  promises.push(performTask(i)); //push promise to the array
}


//If in your real case i is actually an array of something then you can 
//just simplify it to $q.all(myArrayOfInputs.map(performTask)).then(...)

$q.all(promises).then(performDoneTask); //use q.all to wait for all promises to be fulfilled.

//Method that does something once all the timeouts are completed
function performDoneTask(){

}

//Method that does something with i and returns a promise from the timeout
function performTask(i){ 
  return $timeout(function () {
      //do sth
   }, 100);
}
var承诺=[];
对于(变量i=0;i<1000;i++){
promises.push(performTask(i));//将承诺推送到数组
}
//如果在你的真实例子中,我实际上是一个数组,那么你可以
//只需将其简化为$q.all(myArrayOfInputs.map(performTask)),然后(…)
$q.all(承诺)。然后(PerformOneTask)//使用q.all等待所有承诺兑现。
//方法,该方法在所有超时完成后执行某些操作
函数performOneTask(){
}
//方法,该方法对i执行操作并从超时返回承诺
函数性能任务(i){
返回$timeout(函数(){
//做某事
}, 100);
}

我想不出一个本机解决方案,但实现某种异步管理器非常容易,每次调用start方法(设置计时器时调用)都会增加计数器,每次调用stop方法(异步函数完成时调用)都会减少计数器。当计数器返回到0时,可以触发最后的回调。嗯,谢谢你——到目前为止,我一直在创建自定义承诺(使用$q)并用通知等将所有其他内容包装在其中——这也很好,但对于我的某些目的来说,包装承诺更好。无论如何,谢谢。@seti做自定义承诺你是说用$q创建延迟对象?您不必这样做(除非真的没有其他选项),因为超时已经返回承诺。读这个是的,推迟了$q。