Как мне объединить результаты нескольких ответов axios.get в один массив? - PullRequest
0 голосов
/ 01 февраля 2019

Привет! Я пытаюсь объединить результаты моего запроса на получение axios в один массив.

Я собираю данные из базы данных Mongoose и MongoDB, которая возвращает мне массив соответствующей информации для выполнения запроса axios.

Я запускаю информацию через axios.get, и она возвращает мне соответствующие результаты для каждого объекта в массиве

См. Ниже

const axios = require("axios");

var info = [500000, 2020, 12341234, 12341234]
var algo = "cn8"

console.log(info)


for (var i = 0; i < info.length; i++){

var url = "https://whattomine.com/coins.json?" + algo + "=true" + "&factor%5B" + algo + "_hr%5D=" + info[i]

axios.get(url)
    .then((response) => {
      var result = response.data.coins.Monero.btc_revenue
      
      console.log(result)
      })
}

Однако я также пытаюсь записать этот результат обратно в свою базу данных MongoDB / Mongoose для дальнейшей регистрации, и кто-то предложил мне использовать функцию map для запуска функций записи в обратном направлении.в базу данных для него.

Однако карта работает только для массивов, а результаты, которые я получаю от axios, - нет.Кто-нибудь имеет какие-либо идеи, как присоединить эти ответы, которые я получаю в один массив?

Я приложил картинку ниже для справки

Имейте в виду, что это результаты для console.log (info) находится в ЗЕЛЕНОМ для данных, поступающих в

console.log (результат) находится в КРАСНОМ для данных, которые должны выходить (сначала нужно преобразовать в комбинированный массив, не знаю, как это сделать, когда все результаты находятся водна переменная)

enter image description here

Ответы [ 2 ]

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

Если вы можете использовать async/await, вы можете просто создать массив и добавить результаты один за другим, например:

const result = [];

for (let i = 0; i < info.length; i++) {
  const url = "https://whattomine.com/coins.json?" + algo + "=true" + "&factor%5B" + algo + "_hr%5D=" + info[i]
  const response = await axios.get(url);

  result.push(response.data.coins.Monero.btc_revenue);
}

console.log(response);
0 голосов
/ 01 февраля 2019

Вы можете использовать Promise.all, который будет возвращать ответ на все запросы, как только все они будут выполнены

const PromiseArr = [];
for (let i = 0; i < info.length; i++){

var url = "https://whattomine.com/coins.json?" + algo + "=true" + "&factor%5B" + algo + "_hr%5D=" + info[i]
  PromiseArr.push(
   axios.get(url).then(result => new Promise(resolve => resolve(result.data.coins.Monero.btc_revenue)))
  );
}

Promise.all(PromiseArr).then(res => {
    console.log(res)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...