Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

173
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!