Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

182
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda