我有一個網址陣列urls = ["/url/file_1", "/url/file_2", "/url/file_3" ... "/url/file_n"]
和一個字符串變量str = ""
。 什麼是創建承諾鏈以填充str
以及來自urls
的所有文件的內容的最佳方式?來自陣列的角度承諾鏈
0
A
回答
4
您應該使用$ q.all
$q.all(urls.map(function(url){return $http.get(url)})) //create multiple requests and return the array of promises
.then(function(results){ //an array of results
results.forEach(function(res){ //response object https://docs.angularjs.org/api/ng/service/$http
str += res.data; //concat strings assuming that all get calls will return string
});
});
1
這是可能的使用$q.all
。示例實現:
var urls = [ /* some urls */ ];
var promises = Array(urls.length);
var results = Array(urls.length);
for(var i = 0; i < urls.length; i++) {
promises[i] = yourPromiseReturningFunction(urls[i]).then(function(result) {
results[i] = result;
});
}
$q.all(promises).then(function() {
//Just an example, do whatever youw ant with your results here
console.log(resulst.join(''));
});
這可以用更優雅(更實用的方式)的方式來完成,這只是一個例子來說明它是如何實現的。找到有關$q.all
here的文檔。
1
試着這麼做:
var stringResult = '';
promises = [];
angular.forEach(urls, function (url) {
promises.push($htpp({method: 'GET', url: url}))
}
$q.all(promises).then(
function() {stringResult = stringResult.concat(res)})
+1
請記住,這將追加隨機順序結果並不允許對所有的承諾是反應解決 – LionC
+0
公平點,謝謝。包含在編輯 –
相關問題
- 1. 角度鏈承諾數組
- 2. 角承諾鏈自動化
- 3. 角鏈的承諾
- 4. 角度承諾
- 5. 鏈接http.get承諾與角度服務
- 6. 鏈接的承諾和角
- 7. 理解角度的承諾
- 8. 角度承諾序列循環
- 9. 鏈接承諾,以應付來自this.storage.get()調用異步承諾
- 10. 角度服務承諾
- 11. 角度服務承諾
- 12. 鏈接HTTP發佈承諾角度不在序列中
- 13. 鏈接承諾,並在角度應用中用for循環承諾
- 14. 使用另一個承諾的角度承諾?
- 15. 來自RxJS承諾的流
- 16. 角:與承諾
- 17. 錯誤的角度和RXJS承諾
- 18. 獲得承諾對象的角度
- 19. 有角度的承諾能活多久?
- 20. httpBackend.when()的角度返回承諾()
- 21. 承諾後的角度狀態變化
- 22. $ q並解決角度的承諾
- 23. 有角度的API調用和承諾
- 24. 有角度的http承諾和遞歸
- 25. 承諾返回對象的角度JS
- 26. $角度服務中的http承諾
- 27. 對承諾的角度錯誤處理
- 28. 使用$ q.all的角度承諾
- 29. 解決角度包裹的承諾
- 30. 角度版本和承諾的問題
非常優雅的解決方案!也許添加一些文字可以解釋你在做什麼以及它是如何工作的 – LionC