axios响应格式对象与数组

时间:2018-10-10 22:58:21

标签: javascript arrays axios

我正在使用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: [{…}]

我想对响应(对象与数组)保持相同的格式,但是我不知道该怎么做...

谢谢。

2 个答案:

答案 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], []);
   });

https://codesandbox.io/s/j25l1n7835

答案 1 :(得分:0)

只需为映射的响应添加一个散布运算符:getErrorStream