Будет ли порядок ответов таким же, как порядок URL в моем случае? - PullRequest
0 голосов
/ 04 ноября 2018

ВОПРОС:

Посмотрев на это:

Promise.all: Порядок разрешенных значений

Я не уверен, что это применимо к моему делу. Будет ли responses всегда в том же порядке, что и urls?


КОД:

var urls = [];

for (var i = 0; i < enemies.length; i++) {
     urls.push('someURL/'+enemies[i].id);
}

let promises = urls.map(url => fetchJSON(url, region));

Promise.all(promises).then(responses => {
      //DO SOMETHING HERE WITH RESPONSES WHERE ORDER IS IMPORTANT
});


function fetchJSON(url, region) {
    return fetch(url, {
        region: region,
        headers: { 
            'token': apiKey
        }
    }).then(response => response.json());
}

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

TL; DR: да.

Пояснение:

Array.map возвращает массив обещаний, индекс каждого обещания в массиве соответствует индексу URL в массиве urls.

Promise.all возвращает массив результата resolve s массива promises, индекс каждого результата в responses соответствует индексу соответствующего обещания в массиве promises.

0 голосов
/ 04 ноября 2018

Проверьте документацию

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all#Return_value

Возвращаемые значения будут в порядке пропущенных Обещаний, независимо от порядка выполнения.

Так что ответ - да. Кроме того, было бы тривиально создать тест с использованием setTimeout и независимо проверить, поддерживается ли порядок.

0 голосов
/ 04 ноября 2018

Да, это одна из гарантий, которые предоставляет Promise.all. Со страницы MDN на Promise.all:

Возвращаемое значение

  • ...
  • ...
  • Ожидающее обещание во всех остальных случаях. Это возвращенное обещание затем разрешается / отклоняется асинхронно (как только стек пуст), когда все обещания в данной итерируемой разрешены или если одно из обещаний отклонено. См. Пример об «Асинхронности или синхронности Promise.all» ниже. Возвращаемые значения будут в порядке пропущенных Обещаний, независимо от порядка выполнения.

(мой акцент)

(Также покрывается спецификацией , конечно, но ... спецификацию сложно читать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...