我怎样才能限制角度$ q承诺并发?

Dar*_*ryn 5 concurrency promise angularjs angular-promise

我该怎么做$q.all但限制同时执行多少个promises?

我的问题就像我如何限制Q promise并发?

我希望一次产生的过程不超过5个

对于另一个问题,接受的答案是为了与Q一起工作而承诺的图书馆.但我特别感兴趣的是Angular的解决方案,而不是.$qQ

背景:问题正在解决:
我有两个步骤下载的文件:a)获取URL b)下载文件.
浏览器限制了可以同时检索多少文件,因此当直接使用promises时$q.all会触发所有下载,只有
N会立即发生,例如Chrome中的6,而其余​​文件会延迟.(请参阅浏览器中的Max并行http连接?)
问题是URL已过期,因此当浏览器执行第 N + 1 文件下载时,URL不再有效.
所以我想做的事情throttled.all(6, promises)而不是$q.all(promise)

Mal*_*kus 0

我认为你可以做一些递归的事情。

这将允许您仅使用$q. 你只需要有一个你将使用的列表,无论如何你都需要它$q.all

self.MakeCall = function(theList, chunkSize){
   //Split list into what will be processed and what should be held
    var processList = theList.slice(0,chunkSize);
    var holdList = theList.slice(chunkSize);

    return $q.all(processList).then(function(result) {
      //If holdList is empty you are finished
      if(holdList <= 0) {
        return result;
      }
      else {
        //More items make recursive call to process next set
        return self.MakeCall(holdList, chunkSize);
      }
    });
  };
//Initialize Recursive call
self.MakeCall(self.contacts);
Run Code Online (Sandbox Code Playgroud)