来自数组的角度承诺链

时间:2015-10-08 09:44:26

标签: angularjs promise angular-promise

我有一系列网址str = "" 和一个字符串变量str。 创建承诺链以使用urls中的所有文件内容填充{{1}}的最佳方法是什么?

3 个答案:

答案 0 :(得分: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 :(得分: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上找到文档。

答案 2 :(得分: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)})