Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
La matriz está vacía pero ya no cuando se abre

Llegué a una situación extraña en la que console.log muestra que la matriz está vacía. Sin embargo, cuando lo abro, veo 2 elementos en él. Este comportamiento ni siquiera representa el componente porque cree que las conversations están vacías.

Aquí está el fragmento de código:

 useEffect(() => { if (headers.length > 0) { let fetchedConversations = []; headers.map((conversation) => conversation.conversators.filter(async (conversator) => { if (conversator !== user._id) { let conv = await getUserById(conversator); fetchedConversations.push(conv); } }) ); setConversations((prevState) => fetchedConversations); } }, [headers]);

getUserById.js

 export const getUserById = async (id) => { //console.log(id); try { const config = { headers: { "Context-Type": "application/json", }, withCredentials: true, credentials: "include", }; const response = await axios.get(`${USERS_PATH}/${id}`, config); return response.data; } catch (err) { let data = await err.response?.data; console.log(data); } };

Finalmente, aquí está el fragmento de código donde debería representar algo en la pantalla. Tenga en cuenta que cuando hago clic en la etiqueta p, muestra (finalmente) que hay 2 elementos dentro. Sin embargo, conversations.length > 0 no parece volver a representar esto.

 return ( <> <p onClick={() => console.log(conversations)}>sdas</p> {conversations.length > 0 && conversations.map((conversation, id) => ( <UserContainer key={id}> <UserIcon></UserIcon> <UserInfo> <UserName> {conversation?.name} {conversation?.surname} </UserName> <LastMessage> <SenderInfo></SenderInfo> </LastMessage> </UserInfo> </UserContainer> ))} </> ); }

Las primeras dos consolas muestran una matriz "vacía", pero no cuando se abren. La última consola es cuando presiono la etiqueta p Las primeras dos consolas muestran una matriz "vacía", pero no cuando se abren. La última consola es cuando presiono la etiqueta p

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema está aquí:

 headers.map((conversation) => conversation.conversators.filter(async (conversator) => { if (conversator !== user._id) { let conv = await getUserById(conversator); fetchedConversations.push(conv); } }) );

Está presionando después de esperar una promesa, pero deje que el código continúe.

Prueba esto:

 await Promise.all(headers.map((conversation) => Promise.all(conversation.conversators.filter(conversator=>conversator !== user._id) .map(async (conversator) => { let conv = await getUserById(conversator); fetchedConversations.push(conv); })); ));

El mapa devuelve las promesas, luego usa Promise.all para convertirlas todas en una promesa y esperarla. Ciertamente hay una mejor manera de resolver esto, pero eso debería ser suficiente para que entiendas lo que está sucediendo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda