2016-04-29 96 views
0

我有一個Web應用程序,可讓用戶通過文件輸入選擇多個文件。一旦用戶選擇了這些文件,我就會通過我的rest API逐個上傳這些文件。但是,在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。不幸的是我沒有爲$q寫了一個版本,但它應該是不太很難翻譯:)

在您的例子,它會使用這樣的:

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 
    }); 
} 

基本上, .take解決資源可用時,並使用5個資源之一。 .give會返回資源,並觸發下一個.take進行解析。這個概念很簡單,儘管resourceLimiter的實現很棘手。