配列全体を反復処理して各アイテムのREST API呼び出しを行いますが、jsの非同期性に問題があります。私はasync/awaitを使用しようとしていますが、私は応答を待つことなく未定義を返すので正しく設定しているとは思いません。ループ内でAPI応答を待つ
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));
};
'getClasses'クラスが約束を返した場合、' acc ... 'が約束するため' [... acc] 'を実行できません。なぜここで 'reduce'を使用していますか?あなたは何を達成しようとしていますか?すべてのRESTを順番に実行しますか?または、すべてのリクエストが完了するまで待ちます。 –
基本的に私は人の配列を持っています。その人のためにその日のクラスがあり、その人とその人のクラスの両方を持つオブジェクトを返すならば、私は各人のクラスを取得する要求をしています。移動してください。私は基本的にクラスを持たない人を除外し、その人物のプロパティとクラスを持つ新しいオブジェクトを返したいと思っています。 –
'getClasses'のコードを提供するのに役立つでしょうか? –