AngularJS从对象数组到函数数组

时间:2018-11-06 10:13:53

标签: javascript angularjs promise angular-promise angular-http

我有一个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调用。

2 个答案:

答案 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();
});