Как сделать асинхронный запрос выборочно для части елементов при проходке по массиву?
У меня есть массив data, в котором лежат числа и 1 объeкт с полем blob. Я делаю проходку по этому массиву и в случае если элемент не является числовым значением, мне нужно делать запрос и по окончанию запроса вместо этого объекта подставлять результат запроса (id) Как я могу реализовать данный функционал?
let data = {
photos: [33,24,{blob:'blob'},44]
}
let newData = data.photos.map((photo,i)=>{
if(!isNaN(photo)) {
return photo
} else {
//?
let response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
let commits = await response.json();
return commits.id
}
})
console.log(newPtotoObj)
Ожидаемый результат => [33,24,value_from_request,44]
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Предложенный вам в комментариях вариант:
(async function main() {
const data = {
photos: [33, 24, { blob: 'blob' }, 44]
};
const newData = [];
for (const photo of data.photos) {
if (!isNaN(photo)) {
newData.push(photo);
} else {
let response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
let commits = await response.json();
newData.push(commits.id);
}
}
console.log(newData);
})().catch(console.error);
Автор решения: Grundy
→ Ссылка
Можно воспользоваться Promise.all, а также добавить атрибут async для callback
let newData = await Promise.all(data.photos.map(async (photo,i)=>{
if(!isNaN(photo)) {
return photo
} else {
let response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
let commits = await response.json();
return commits.id
}
}))