Как сделать асинхронный запрос выборочно для части елементов при проходке по массиву?

У меня есть массив 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
  }
}))
→ Ссылка