我正在使用axios / vue来获取一些数据,当前其中一些调用是手动设置的。 我需要自动化所有这些,我几乎成功了,但是即时获取的数据不正确。
这是我当前的“手动”设置:
let linksArr = ['abc.json','def.json'];
axios
.all(linksArr.map(l => axios.get(l)))
.then(
axios.spread(function(abc, def) {
var merged = [...abc.data, ...def.data]
})
)
在这种设置下,我得到了这样的响应:
(2) [{…}, {…}]
0: {}
1: {}
但是当我将其更改为更“自动”的东西时(linksArr是动态的,并且可能很长):
let linksArr = ['abc.json','def.json'];
axios
.all(linksArr.map(l => axios.get(l)))
.then(
responses => {
var merged = [].concat(responses.map(res => res.data));
}
);
我得到这个作为回应(请注意[{}]):
(2) [Array(1), Array(1)]
0: [{…}]
1: [{…}]
我想对响应(对象与数组)保持相同的格式,但是我不知道该怎么做...
谢谢。
答案 0 :(得分:1)
在后一个示例中,您的回调有误。您在原始代码中所做的就是将散布项目(...ARG.data
)连接起来,而在您的后面的代码中,您缺少了这一部分。请检查以下工作示例:
let linksArr = ['abc.json','def.json'];
axios
.all(linksArr.map(l => axios.get(l)))
.then(responses => {
const merged = responses
.map(r => r.data)
.reduce((acc, item) => [...acc, ...item], []);
});
答案 1 :(得分:0)
只需为映射的响应添加一个散布运算符:getErrorStream