Вернуться к уроку

Загрузить массив последовательно

Есть массив 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() как начала асинхронной цепочки – очень распространённый приём.

Открыть решение в песочнице.