我正在进行$http调用,它遍历多个api中的每一个并返回一个对象中的所有数据.我通常已经准备好在$http调用时解决.与此类似:
function getAllData(api) { return $http({ method: 'GET',url: '/api/' + api }) .then(sendResponseData) .catch (sendGetVolunteerError); }
当前函数我遍历每个api并将api中的每个对象推送到一个数组中,然后将其推送到整个数组中.我有这个功能,返回一个多维数组,需要被展平.
我想在一个承诺中返回这个,但是返回undefined.这是我到目前为止的情况?有没有更好的方法来解决这个问题?
DataService的:
function getSearchData() { return { loadDataFromUrls: function () { var apiList = ["abo","ser","vol","con","giv","blo","par"]; var deferred = $q.defer(); var log = []; angular.forEach(apiList,function (item,key) { var logNew = []; $http({ method: 'GET',url: '/api/' + item }).then(function (response) { angular.forEach(response.data,key) { this.push(item); },logNew); return logNew; }); this.push(logNew); },log); $q.all(log).then( function (results) { deferred.resolve( JSON.stringify(results)) },function (errors) { deferred.reject(errors); },function (updates) { deferred.update(updates); }); return deferred.promise; } }; };
控制器:
function getSearchData(){ return dataService.getSearchData.loadDataFromUrls; } $scope.searchData = getSearchData();
您需要$q.all和地图功能:
原文链接:https://www.f2er.com/angularjs/140910.htmlfunction getSearchData() { return { // returns a promise for an object like: // { abo: resultFromAbo,ser: resultFromSer,... } loadDataFromUrls: function () { var apiList = ["abo","par"]; return $q.all(apiList.map(function (item) { return $http({ method: 'GET',url: '/api/' + item }); })) .then(function (results) { var resultObj = {}; results.forEach(function (val,i) { resultObj[apiList[i]] = val.data; }); return resultObj; }); } }; }