извлекать внутри извлекать с приращением - PullRequest
0 голосов
/ 09 марта 2020

У меня проблема с l oop и как переписать весь массив, чтобы получить необходимые данные. Мне нужно получить данные, а затем вставить «id» в следующую выборку, чтобы получить данные и объединить 2 массива. Как я могу получить данные за пределами l oop в другой выборке, а затем объединить данные?

`fetch(URL)
  .then(res => res.json())
  .then(data => {
    let companies = data;
    for (let i = 0; i <= companies.length; i++) {
      fetch(`URL${companies[i].id}`)
        .then(res => res.json())
        .then(data => {
          there loop is sending me data needed from 2nd fetch and 300 another data from first fetch.
        });
      // console.log(companies[i].name);
    }
  })
  .catch(error => console.log(error));`

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Вы можете использовать Promise.all() для ожидания выполнения всех fetch запросов. Promise.all принимает массив обещаний и возвращает одно обещание, которое разрешается, когда разрешаются все переданные обещания. Если одно из пропущенных обещаний отклоняется, Promise.all также отклоняет.

fetch(URL)
  .then(res => res.json())
  .then(data => {
    let companies = data;
    let promises = [];

    for (let i = 0; i <= companies.length; i++) {
      let promise = fetch(`URL${companies[i].id}`)
        .then(res => res.json());

      promises.push(promise);
    }

    Promise
      .all(promises)
      .then(dataArrays => {
          // dataArrays[0] is the result from company 0
          // dataArrays[1] is the result from company 1 and so on
      })
      .catch(error => console.log(error));
      // console.log(companies[i].name);
    }
  })
  .catch(error => console.log(error));

Однако, если возможно, объединение всех запросов companies в один и объединение их данных на бэкэнде будет оптимальным решение, так как оно будет более эффективным.

0 голосов
/ 09 марта 2020

Вы можете использовать await для второй выборки. Объявляйте массив в первой выборке, всякий раз, когда данные извлекаются во второй выборке, pu sh в массиве. Тогда вы можете получить доступ за пределами для L oop.

fetch('https://api.github.com/users?since=135')
  .then(res => res.json())
  .then(async (data) => {
    let users = data;
    let arr = [];
    for (let i = 0; i <= users.length; i++) {
      const response = await fetch(`https://api.github.com/users/${companies[i].login}`);
      const user = response.json();
      arr.push(user);
    }
    console.log(arr);
  })
  .catch(error => console.log(error));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...