Я хочу сделать мой код более читабельным, используя async / await вместо fetch ().
Мой код должен выполнять следующие действия:
- Выборка сообщений из API
- Выбор случайной записи (с использованием метода массива find ())
- Выполнение другого вызова API на основе выбранных данных случайной записи.
То, как я это сделал, используя fetch ()
componentDidMount() {
const postsURL = 'https://jsonplaceholder.typicode.com/posts';
fetch(postsURL)
.then(res => res.json())
.then(posts => {
const randomNumber = Math.floor(Math.random() * 100);
const randomPost = posts.find(post => post.id === randomNumber);
fetch(
`https://jsonplaceholder.typicode.com/users/${
randomPost.userId
}`
).then(res => {
res.json().then(user => {
this.setState(() => {
return {
posts: posts,
showingPost: randomPost,
showingUser: user
};
});
});
});
})
.catch(err => console.log(err));
}
Теперь я пытаюсь полностью преобразовать этот код в одну асинхронную функцию getData ()
async getData() {
// get posts
const getPostsResponse = await fetch(
'https://jsonplaceholder.typicode.com/posts'
);
const posts = await getPostsResponse.json();
// get showingPost
const randomPost = posts.find(
post => post.id === Math.floor(Math.random() * 100)
);
//get user
const getUserResponse = await fetch(
`https://jsonplaceholder.typicode.com/users/${randomPost.userId}`
);
const user = await getUserResponse.json();
// return/setState
return this.setState(() => {
return {
posts: posts,
showingPost: randomPost,
showingUser: user
};
});
}
componentDidMount() {
this.getData();
}
Проблема в том, что переменная - randomPost
в этой асинхронной функции иногда возвращает неопределенное значение.Его необходимо установить перед переходом к следующему вызову API.
Как правильно использовать find () или любой другой метод внутри функции async / await между 2 вызовами API?Спасибо!