Можно ли вернуть значение (массив) из функции async / await, которая выполняет несколько запросов get? - PullRequest
1 голос
/ 10 июня 2019

Я новичок в Javascript, и я нахожусь в процессе решения последней части моей программы.Тем не менее, я испытываю трудности с функцией асинхронного ожидания, поскольку я пытаюсь получить и сохранить данные из нескольких запросов и поместить их в массив, который я хочу использовать снаружи в функции.Позже я хочу отобразить содержимое этого массива (кавычки) и отобразить его в браузере.Внутри моего внутреннего цикла я могу консоль записывать в журнал мой массив, но когда я пытаюсь вернуть его или использовать саму функцию, я столкнулся с проблемой.Любые идеи?

У меня есть массив URL-адресов, которые я использую для нескольких вызовов, потому что мне нужно определенное количество элементов в моем массиве, а предоставляемый API не дает мне более 25 цитат за ответ.



const getQuotes = () => {
  let completeQuotesArray = [];
  const quotesPromises = urls.map(async url => {
    const response = await axios.get(url);
    console.log(response);
    return response.data.quotes;
  });
  for (const quotesPromise of quotesPromises) {
    let quotesArray = await quotesPromise;
    for (let i = 0; i < quotesArray.length; i++) {
      let quote = quotesArray[i].body;

      if (quote.length < 150) {
        completeQuotesArray.push(quote);
      }
    } 
  }
  return completeQuotesArray;
}

1 Ответ

0 голосов
/ 10 июня 2019

Вот пример использования Promise.all, упомянутого для запроса ваших URL параллельно: https://jsfiddle.net/3w1yo9ts/

const quotesPromises = await Promise.all(urls.map(url => axios.get(url)))

Некоторые дополнительные комментарии содержатся в коде для объяснения и регистрируют ответ, чтобы вы могли увидеть, что делает Promise.all :) Данные ответа немного отличаются от ваших, но я уверен, что их можно адаптировать к вашим потребностям. Я также рекомендовал бы проверить try ... catch , чтобы убедиться, что отклонение обещания обработано.

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