Как вызвать несколько запросов с помощью Ax ios и объединить ответ, используя массив URL-адресов - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующий код:

var pagina 
var array_de_urls=[]

for (pagina=1; pagina <= self.state.numero_de_paginas; pagina++) {
    array_de_urls.push(Constantes.URL_PREFIX + '/courses/'+course_id+'/enrollments?role[]=StudentEnrollment&state[]=active&per_page='+Constantes.PER_PAGE_VALUE+'&page='+pagina)
}

После выполнения кода параметр array_de_urls содержит 13 URL-адресов.

Затем я запускаю этот фрагмент кода

array_de_urls.forEach(url => {
  axios.get( url, config
  ).then((response) => {
    console.log("getAlunosArray chamado axios")

    var joined = self.state.array_aluno.concat(response.data);
    self.setState({ array_aluno: joined })
  }).catch((error) => {
    console.log("error array_de_urls: "+error)
  });    
});

Мне удалось объединить все результаты внутри параметра состояния array_aluno.

Но теперь я хочу попробовать другой подход.

Я хочу создать асинхронный c функция, которая возвращает значение без использования параметра «состояние».

Я пытаюсь запустить приведенный ниже код:

var pagina 
var array_de_urls=[]
for (pagina=1; pagina <= self.state.numero_de_paginas; pagina++) {
    array_de_urls.push(Constantes.URL_PREFIX + '/courses/'+course_id+'/enrollments?role[]=StudentEnrollment&state[]=active&per_page='+Constantes.PER_PAGE_VALUE+'&page='+pagina)
}
let response = []
for (let i = 0; i < array_de_urls.length; i++) {
    response.concat( await axios.get( array_de_urls[i], config ) );
}
return response.data

Но я получил объект «undefined» из этого кода .

Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 05 мая 2020

Мне удалось создать функцию для решения моей проблемы.

export async function getAlunoArrayAsync(config, course_id, self)  {
  console.log("getAlunoArrayAsync chamado")
  var pagina 
  var array_de_urls=[]
  for (pagina=1; pagina <= self.state.numero_de_paginas; pagina++) {
    array_de_urls.push(Constantes.URL_PREFIX + '/courses/'+course_id+'/enrollments?role[]=StudentEnrollment&state[]=active&per_page='+Constantes.PER_PAGE_VALUE+'&page='+pagina)
  }
  var merged = [];  
  await axios.all( array_de_urls.map(l => axios.get(l, config)) )
  .then(res => {
    merged = [].concat(res)
  })
  let concatenated = []
  for (let i = 0; i < merged.length; i++) {
    // console.log("merged merged[i].data")
    // console.log(merged[i].data.length)
    for (let j = 0; j < merged[i].data.length; j++) {
        //console.log("merged merged[i][j].data: "+j)
        //console.log(merged[i].data[j])
        concatenated.push( merged[i].data[j] )
    }
  }
  return concatenated
}
...