Возврат данных с помощью axios вызвал асинхронную проблему при загрузке в массив - PullRequest
0 голосов
/ 16 мая 2019

Я пытался получить некоторую информацию от некоторых API с циклическим изменением массива, чтобы получить массив результатов из axios, чтобы получить информацию, не выдвинутую правильно в массив массива. Я думаю, что это асинхронная проблема, потому что когда я использую setTimeout в компоненте, который вызывает массив, он показывает данные правильно и когда не использует setTimeout, он показывает массив правильно, но не может получить доступ к их значениям Не могли бы вы помочь мне выполнить мою функцию получения асинхронной информации или дать другое решение

Проблема вызвана циклом foreach. Может быть, обещание может решить проблему код

const orgName = org.value.substr(1);
  const groups = user.group.filter(group => group.includes(orgName));
  const resultat = [];
  dispatch(SharingLoading());
  groups.forEach(function(group, index) {
    let idparts = group.split("#");
    let aBox = "a" + orgName;
    axios
      .get("api/" + aBox + "/group/" + aBox + ":" + idparts[1])
      .then(res => resultat.push(res.data[0]));
  });
  dispatch(setSharing(resultat)); 

Ответы [ 2 ]

0 голосов
/ 17 мая 2019
const orgName = org.value.substr(1);
const groups = user.group.filter(group => group.includes(orgName));
dispatch(SharingLoading());
Promise.all(groups.map(group => {
  let idparts = group.split("#");
  let aBox = "a" + orgName;
  return axios
    .get("api/" + aBox + "/group/" + aBox + ":" + idparts[1])
})).then(list => list.map(res => res.data[0]))
.then(resultat => dispatch(setSharing(resultat)));
0 голосов
/ 16 мая 2019
const orgName = "a" + org.value.substr(1);
let groups = user.group.filter(group => group.includes(orgName));
groups = groups.map(group => group.split("#")[1])
const resultat = [];
dispatch(SharingLoading());


Promise.all(groups.map(group =>
    axios
        .get("api/" + orgName + "/group/" + orgName + ":" + group)
        .then((response) => resultat.push(response.data[0]))
        .catch((err) => {
            console.log(err) // dispatch action for error handling
        })
))
    .then(() => {
        dispatch(setSharing(resultat));
    })
...