如何将axios.get多个响应结果包装到一个数组中?

时间:2019-02-01 05:42:59

标签: javascript arrays mongodb mongoose axios

嗨,我正在尝试将axios get请求的结果合并到一个数组中。

我正在从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函数来运行将其写回到数据库中的写函数。

但是map只适用于数组,而我从axios获得的结果却不行。有谁知道如何加入这些响应,我正在进入一个数组?

我在下面附上了一张图片供参考

请记住这些是针对 console.log(info)为绿色,用于输入数据

console.log(result)呈红色表示应该输出的数据(需要先转换为组合数组,不确定所有结果都在一个变量中时该怎么做)

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用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)
});

答案 1 :(得分:0)

如果可以使用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);