Парсинг нескольких JSON с JavaScript Promise.all () - PullRequest
0 голосов
/ 23 февраля 2019

Вот мой пример использования: - У меня есть два URL-адреса, которые я посылаю один и тот же вход для заполнения параметра - Мне нужно проанализировать ответ JSON и создать список из ключа ответа.

Здесьэто код, который у меня есть до сих пор:

function initialCall(input) {
  let urls = [
    `https://mybusinessendorsements.com/api/auth?token=0d34aa6dad5d50de697c62bdf8a633f4&industry=${input}`,
    `http://mybusinessendorsements.com/api_spn/auth?token=0d34aa6dad5d50de697c62bdf8a633f4&industry=${input}`
  ];

  let requests = urls.map(url => fetch(url));
  Promise.all(requests)
  .then(responses => responses.forEach(
    response => alert(`${response.json()}: ${response.status}`)
  ))};

//[object Promise]: 200
//[object Promise]: 200

Я не уверен, как заставить распечатывать массив json для анализа и манипулирования по мере необходимости, помогите!?

1 Ответ

0 голосов
/ 23 февраля 2019

response.json() возвращает еще одно обещание [1], поэтому вам нужно будет дважды вызвать Promise.all, например:

Promise.all(requests)
  .then(responses => Promise.all(responses.map(r => r.json())))
  .then(jsonObjects => /* ... */);

Для удобства чтения вы можете ввести вспомогательную функцию

Promise.all(requests)
  .then(toJSON)
  .then(jsonObjects => /* ... */);

function toJSON(responses) {

  if (!Array.isArray(responses)) {
    // also handle the non array case
    responses = [responses];
  }

  return Promise.all(responses.map(response => response.json()));

}

Если вам нужно сохранить ответ (состояние):

function resolveJSON(responses) {

  return Promise.all(
    responses.map(response => response.json()
      // will return an object with keys "response" and "json"
      .then(json => { response, json }))
    );

}

[1] https://developer.mozilla.org/en-US/docs/Web/API/Body/json

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