嗨,我正在尝试将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)呈红色表示应该输出的数据(需要先转换为组合数组,不确定所有结果都在一个变量中时该怎么做)
答案 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);