AngularJS из массива объектов в массив функций - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть массив 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 голосов
/ 06 ноября 2018

Один из вариантов - использовать шаблон асинхронности / ожидания, в котором вы можете ожидать в цикле запроса, который заставит их выполняться в последовательности.

Попробуй вот так

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();
});
0 голосов
/ 06 ноября 2018

Вы можете использовать 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());
...