gpt4 book ai didi

angularjs - Angular $q 返回 promise 多次 $http 调用

转载 作者:行者123 更新时间:2023-12-04 13:13:25 25 4
gpt4 key购买 nike

我正在处理 $http 调用,该调用会遍历多个 api 中的每一个并返回一个对象中的所有数据。我通常会在调用 $http 时准备好解决的 promise 。与此类似:

function getAllData(api) {
return $http({
method: 'GET',
url: '/api/' + api
})
.then(sendResponseData)
.catch (sendGetVolunteerError);
}

我当前的函数循环遍历每个 api 并将 api 中的每个对象推送到一个数组中,然后将其推送到一个整体数组中。我有这个功能,返回一个多维数组,需要扁平化。

我想以 promise 的形式返回它,但我正在返回 undefined .这是我到目前为止所拥有的?有没有更好的方法来解决这个问题?

数据服务:
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, function (item, 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;
}
};
};

Controller :
function getSearchData(){
return dataService.getSearchData.loadDataFromUrls;
}

$scope.searchData = getSearchData();

最佳答案

$q.all和一个 map功能是你在这里需要的:

function getSearchData() {
return {
// returns a promise for an object like:
// { abo: resultFromAbo, ser: resultFromSer, ... }
loadDataFromUrls: function () {
var apiList = ["abo", "ser", "vol", "con", "giv", "blo", "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;
});
}
};
}

关于angularjs - Angular $q 返回 promise 多次 $http 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29168316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com