我有一个angularjs $http
配置对象数组:
var steps= [
{url:"http://api.com/test1", method: "GET"},
{url:"http://api.com/test2",method: "POST"},
{url:"http://api.com/test3",method: "GET"},
]
这些都是我需要依次执行的所有 API 调用。此呼叫的数量可以变化。
我想在执行$http
调用的函数中变换此对象的每个对象(这样,我就可以将其与map
一起使用以获得函数数组)。
类似的东西:
function transform(conf){
return $http(conf);
}
但是,显然,这会执行$http
调用。
答案 0 :(得分:2)
您可以使用Array.reduce链接承诺。
let promise = steps.reduce((promise, step) => promise.then(() => $http(step)), $q());
ES5
let promise = steps.reduce(function(promise, step){
return promise.then(function(){
return $http(step);
});
}, $q());
答案 1 :(得分:2)
一种选择是使用异步/等待模式,您可以在请求循环中等待,这将使它们按顺序执行。
尝试一下
app.controller('yourControllerController',
async function($scope, $http) {
var steps =
[
{ url:"http://api.com/test1", method: "GET" },
{ url:"http://api.com/test2", method: "POST" },
{ url:"http://api.com/test3", method: "GET" },
];
async function processHttpRequests(){
for(const step of steps){
var result = await $http({ method: step.method, url: step.url});
console.log('Url:' step.url + ' Result: ' + result);
}
};
await processHttpRequests();
});