2016-04-29 17 views
0

私はユーザーがファイル入力で複数のファイルを選択できるようにするWebアプリを持っています。ユーザーがファイルを選択すると、残りのAPIを介してこれらのファイルを1つずつアップロードします。しかし、IEでは、ユーザーが多数のファイルを一度に(> 10)選択すると、IEはランダムにいくつかの要求を中止します(応答がない場合には先に質問を投稿しました。here)。私がこれを修正すると思う唯一の方法は、これらのhttp要求を抑制することです。AngularJSでスロットルを約束

たとえば、ユーザーが20個のファイルを選択した場合、一度に5個のファイルを消去したいと考えています。 5つの約束がすべて完了したら、次の5つのグループから始めましょう。これを行う方法は?

+0

これを確認してください:http://stackoverflow.com/questions/26596835/how-do-i-throttle-http-requests-in-angularjs –

答えて

0

もちろん、約束を使っても可能です。私は、私のes6約束パターンリポジトリhttps://github.com/DukeyToo/es6-promise-patterns#resource-limiterでこれを行うのに役立つ関数の例を持っています。 、基本的に

var limiter = resourceLimiter(5); 
for (var i=0; i<20; i++) { 
    limiter.take().then(function() { 
    return $http({..do your request .}) 
    }.then(function(response) { 
    limiter.give(); 
    //.. then do whatever with response 
    }); 
} 

:残念ながら、私は$qのために書かれたバージョンを持っていないが、翻訳するために、あまりにも難しいことではありませんする必要があります:)

あなたの例では、このようなものを使用することだろう.takeは、リソースが使用可能になったときに解決し、5つのリソースのいずれかを使用します。 .giveはリソースを戻し、次の.takeをトリガーして解決します。このコンセプトは十分に単純ですが、resourceLimiterの実装は難しいです。