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