加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular $q返回承诺多个$http调用

发布时间:2020-12-17 09:04:01 所属栏目:安全 来源:网络整理
导读:我正在进行$http调用,它遍历多个api中的每一个并返回一个对象中的所有数据.我通常已经准备好在$http调用时解决.与此类似: function getAllData(api) { return $http({ method: 'GET',url: '/api/' + api }) .then(sendResponseData) .catch (sendGetVolunte
我正在进行$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和地图功能:
function 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;        
            });
        }
    };
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读