在angularjs限制同時間的request的數量

假設有多筆request要發送時,但又不希望一次全發送出去,希望將request的數量,在同個時段只出現5個request,這時候就需要一個manager之類的object去處理,在這裡使用ngHttpPool為例。

安裝ngHttpPool

使用bower安裝,或者至github下載:

1
bower install ngHttpPool

使用ngHttpPool

載入一個ngHttpPool module:

1
<script type="text/javascript" src="/bower_components/ngHttpPool/public/src/ngHttpPool.js"></script>

定義module相依性:

1
2
3
4
5
angular.module( "app", [ 
"ngHttpPool"
]).controller('ctrl',function( httpPool ){
//doSomething
});

建立一個pool和定義同時存在的最大request數量:

1
2

var pool = httpPool.create( 2 );

傳入config,發送多個request:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

for( var index = 0; index<10 ; index++ ){

/**
* @param {Object} config
* @param {function} success is optional
* @param {function} error is optional
*/
pool.map({method:"get",url:"/",params:{id:index}}, function(){

console.log( "success" );

});

}

如果要等request都從server返回,可使用以下的方式:

建立一個defer,會將之後發送request都當作監聽對象:

1
2

pool.listen()

將config push到pool,執行request的發送:

1
2
3
4
5

for( var index = 0; index<10 ; index++ ){

pool.map({method:"get",url:"/",params:{id:index}});
}

結束監聽,當所有結果回傳時,將會執行promise.then:

1
2
3
4
5
6

var promise = pool.Promise();

promise.then(function(){
console.log( "all of the callbacks." );
});

Demo

可參考ngHttpPool github。