Ich bin über ein Array iterieren und einen REST-API-Aufruf für jedes Element, aber ich habe Probleme mit der Async-Natur von js. Ich versuche async/await zu verwenden, aber ich denke nicht, dass ich es richtig einstelle, weil es nicht auf die Antwort wartet und unbestimmt zurückkommt.Warten auf API-Antwort in einer Schleife
onSearchSuccess = async (response) => {
const persons = response._embedded.persons_search_collection;
const personsWithClasses = await persons.reduce(
(acc, person) => {
const params = {
person_id: person.person_id,
date: '2017-01-05',
enrollment_status: 3,
class_status: 2,
};
return getClasses(//this function does an GET request and returns the response
params,
(classesResponse) => {
const { classes } = classesResponse._embedded;
console.log(classes); //logs after the console.log below
return [...acc, { ...person, classes }];
},
() => acc,
);
}, []);
console.log(personsWithClasses); //return undefined
}
export const getClasses = (params, success, error) => {
axios.get(`${uri}/classes`, { params })
.then(({ data }) => {
success(data);
})
.catch(err => error(err));
};
Wenn "getClasses" -Klassen eine Verheißung zurückgeben, dann können Sie '[... acc]' nicht tun, weil 'acc' ein Versprechen ist. Warum benutzt du 'reduce' hier? Was * genau * willst du erreichen? Möchten Sie alle REST nacheinander ausführen? Oder einfach warten, bis alle Anfragen erledigt sind? –
Grundsätzlich habe ich eine Reihe von Leuten, ich mache eine Anfrage, um die Klassen für jede Person zu bekommen, wenn es Klassen an diesem Tag für diese Person gibt dann ein Objekt mit der Person und der Person Klassen zurückgeben, ansonsten einfach den Akku zurückgeben und fahre fort. Ich möchte im Grunde die Leute ohne Klassen ausfiltern und ein neues Objekt mit den Eigenschaften der Person und den Klassen zurückgeben, wenn sie es tun. –
Würde es helfen, wenn ich den Code für 'getClasses' zur Verfügung stelle? –