Сегодня я обнаружил: for async of

Код, над которым я работал

Живой просмотр

При использовании GitHub’s rest API я обнаружил, что поиск подписчиков пользователя не возвращает результат, если вы следуете за пользователем, и вам нужно сделать отдельный запрос для этого.

Пока все хорошо, поэтому я добавил цикл forEach, который ожидает второго запроса, а затем вставляет, следует ли пользователь за мной.

export const getUserWithFollowingDetails=async(token:string,url:string,username:string)=>{
 let followers:any=[]
const users = await getAuthedUserFollowers(token,url)
users.forEach((user)=>{
user.following_me = await getIsUserFollowingMe(token,username,user.login)
}).catch((e)=>{})
followers.push(user)
  })
  return followers
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Код работал, но имел странные результаты. Код в итоге выглядел так, как я ожидал, но было слишком поздно для react, чтобы заметить это и переделать рендеринг, поэтому выводимые данные не соответствовали значениям, записываемым в консольный журнал. После некоторого гугления я наткнулся на . for async…, который представляет собой способ циклического перебора элементов и выполнения ожиданий во время асинхронных действий с объектами массива.

export const getUserWithFollowingDetails=async(token:string,url:string,username:string)=>{
        let followers:any=[]
         const users = await getAuthedUserFollowers(token,url)
         for await (const user of users){
         //@ts-ignore
user.following_me = await getIsUserFollowingMe(token,username,user.login)
         .catch((e)=>{})
         followers.push(user)
         }
         return followers
        }

Вход в полноэкранный режим Выход из полноэкранного режима

хорошее объяснение

Код, над которым я работал

Предварительный просмотр в реальном времени

Оцените статью
devanswers.ru
Добавить комментарий