Вот код, очень похожий на ваш, но без обработки или добавления индексных чисел, поэтому он немного более понятен.
const queue = [
{ url: '/api/test/1' },
{ url: '/api/test/2' },
{ url: '/api/test/3' },
{ url: '/api/test/4' },
];
function runQueue() {
const req = queue[0];
$http({method: 'get', url: req.url})
.success(response => {
console.log(response);
queue.shift();
if (queue.length > 0) {
runQueue();
}
})
.error(err => {
console.error(err);
})
}
Решение с использованием Bluebird Promises.
Другим хорошим вариантом может быть (особенно если ваш код является nodejs на стороне сервера) использование библиотеки bluebird Promise .Эта библиотека в настоящее время не очень популярна, потому что Promises поддерживаются практически везде.Но все же некоторые методы очень полезны.В вашем случае Promise.each метод будет отлично работать.
const Promise = require('bluebird'); // or import * as Promise from 'bluebird';
const queue = [
{ url: '/api/test/1' },
{ url: '/api/test/2' },
{ url: '/api/test/3' },
{ url: '/api/test/4' },
];
Promise.each(queue, (req) => {
return http$({method: 'get', url: req.url}).then((resp) => {
console.log(resp);
});
}).then(() => {
console.log("done");
}).catch(err => {
console.error(err);
})