Tengo una aplicación en la que obtengo algunas publicaciones del usuario y luego las inserto en un repositorio de GitHub. Sin embargo, me gustaría detectar todos los errores que puedan surgir de este mapa. ¿Cómo podría lograr eso? Actualmente, mi useState está, por supuesto, reemplazando el estado anterior allí y no estoy seguro de cómo proceder. Aquí está el código:
const [errors, setErrors] = useState<string[]>([]) const triggerPostsBackup = (postsData) => { posts.map(async (post) => { try { await THE_REQUEST } catch (error) { const errorString = `${post.title} failed to upload!` setErrors(errors.concat(errorString)) } } }¿Alguna sugerencia?
También traté de establecer una variable interna para mantener todos los errores y, al final del mapa, usé un useState para crear el estado de mis errores, pero fallé por completo allí.
Puede usar Promise.allSettled para capturar el resultado de cada solicitud. Luego, una vez que se completan todas las solicitudes, puede reducirlas, colocando las promesas rechazadas en una matriz de errores. Luego, finalmente, llame a setErrors.
const [errors, setErrors] = useState<string[]>([]); const triggerPostsBackup = async (postsData) => { const results = await Promise.allSettled( posts.map(async (post) => { await THE_REQUEST; }) ); const errors = results.reduce<string[]>((acc, next, index) => { if (next.status === 'rejected') { acc.push(`${posts[index].title} failed to upload!`); } return acc; }, []); setErrors(errors); };Encontré una solución a mi problema. Pude resolverlo con una callback de llamada ( documentación ) y se ve así:
const [errors, setErrors] = useState<string[]>([]) const triggerPostsBackup = (postsData) => { posts.map(async (post) => { try { await THE_REQUEST } catch (error) { const errorString = `${post.title} failed to upload!` setErrors((previousState) => [...previousState, errorString]) } } }