Загрузить массив последовательно
Есть массив URL:
'use strict';
let urls = [
'user.json',
'guest.json'
];
Напишите код, который все URL из этого массива загружает один за другим (последовательно) и сохраняет результаты в массиве results
, а потом выводит.
Вариант с параллельной загрузкой выглядел бы так:
Promise.all( urls.map(httpGet) )
.then(alert);
В этой задаче загрузку нужно реализовать последовательно.
Для последовательной загрузки нужно организовать промисы в цепочку, чтобы они выполнялись строго – один после другого.
Вот код, который это делает:
// начало цепочки
let chain = Promise.resolve();
let results = [];
// в цикле добавляем задачи в цепочку
urls.forEach(function(url) {
chain = chain
.then(() => httpGet(url))
.then((result) => {
results.push(result);
});
});
// в конце — выводим результаты
chain.then(() => {
alert(results);
});
Использование Promise.resolve()
как начала асинхронной цепочки – очень распространённый приём.