объект формата ответа axios против массива - PullRequest
0 голосов
/ 11 октября 2018

Я использую 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 голосов
/ 11 октября 2018

Просто добавьте оператор распространения для сопоставленных ответов: [].concat(...responses.map(res => res.data));

0 голосов
/ 11 октября 2018

У вас есть ошибка в вашем обратном вызове в последнем примере.То, что вы делаете в своем исходном коде, это конкатенация распространяемых элементов (...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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...