Как связать ответы от топора ios .all с ключом - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать ax ios .all для выполнения нескольких вызовов из массива объектов, чтобы я мог связать ответ с указанным ключом c:

axiosArrayOfObjects = [
    {uniqueID1: axios.get1},
    {uniqueID2: axios.get2}
    {uniqueID3: axios.get3}
]


for (var i = 0; i < axiosArrayOfObjects.length; i++) {
  for (var key in axiosArrayOfObjects[i])
    var value = axiosGetRequestArray[i][key]

    axios.all(value).then(axios.spread((...response) => {
      console.log(response[0])
    }))
}

Но я получаю ошибка, которая говорит: «TypeError: объект не повторяется»

Есть ли другой способ связать каждый ответ от запроса ax ios .all с указанным c ID? Мне нужно обновить объект в базе данных с помощью ответа на вызовы.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Вам не нужно перебирать ключи объектов, проблема в том, что вы вызываете axios.all(..) с value, который представляет собой один запрос, а не массив запросов. Вам нужно сделать что-то вроде этого:

const axiosArrayOfObjects = [
    {uniqueID1: axios.get1},
    {uniqueID2: axios.get2}
    {uniqueID3: axios.get3}
]


const map = axiosArrayOfObjects.reduce((a, c) => {
  Object.entries(o).forEach(([key, value]) => {
    a.ids.push(key);
    a.requests.push(value);
  });
  return a;
}, {
  requests: [],
  ids: []
})

axios.all(map.requests).then(axios.spread((...response) => {
  responses.forEach((response, index) => {
    console.log('request id', map.ids[index], 'response', response)
  })
}));
1 голос
/ 30 марта 2020

Можете ли вы использовать Promise.all здесь?

const axiosArrayOfObjects = [
    { id: '1', get: axios.get1},
    { id: '2', get: axios.get2}
    { id: '3', get: axios.get3}
]

/* array of promises */
const requests = axiosArrayOfObjects.map(item => item.get());

const result = await Promise.all(requests);
console.log(result);
/* array of results, order is the save as in `axiosArrayOfObjects`,
so you can use indexes to match elements of two arrays */

/* without await */
Promise.all(requests).then(result => console.log(result));
...