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

620
Views
¡promesa de problemas! ¿Cómo puedo escribir esto de tal manera que espera el final?

Tratando de escribir esto de una manera que esperará a que se completen las operaciones de db. ¿Posible?

 function addFriendsToSession(session, sessionId) { const friends = []; const incoming = session.users.forEach(async user => { console.log('user', user); await db .collection('users/' + user + '/settings') .doc(user) .get() .then(doc => { if (doc.exists) { const returnObj = doc.data(); return returnObj.friends ? returnObj.friends : []; } else { return []; } }); }); friends.push(incoming); return friends; }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Utilice Promise.all .

Promise.all acepta una serie de promesas y se resuelve una vez que se ha resuelto cada promesa. Puede mapear su operación usando map . P.ej,

 const promises = session.users.map(user => { console.log('user', user); return db .collection('users/' + user + '/settings') .doc(user) .get() .then(doc => { if (doc.exists) { const returnObj = doc.data(); return returnObj.friends ? returnObj.friends : []; } else { return []; } }); }); const friends = await Promise.all(promises) return friends;
about 4 years ago · Juan Pablo Isaza Report

0

Hay una serie de cuestiones aquí.

  1. En db.then() , se usa return , pero este valor nunca se devuelve desde la función que lo encierra (que es async user => {...} )
  2. a const incoming se le asigna el resultado de session.users.forEach , pero Array.forEach() nunca tiene un valor de retorno (¿puede estar pensando en Array.map() ?)
  3. Incluso si resolvió los primeros dos problemas, la incoming aún sería una serie de Promesas

Sugerencias adicionales:

  • No mezcle async/await con .then

Poniendolo todo junto:

 const incoming = session.users.map(async user => { console.log('user', user); const doc = await db .collection('users/' + user + '/settings') .doc(user) .get(); //we assigned `doc` using await instead of using .then if (doc.exists) { const returnObj = doc.data(); return returnObj.friends ? returnObj.friends : []; } else { return []; } }); //incoming is not an array of Promises const incomingFriends = await Promise.all(incoming); //takes an array of Promises and returns an array of the resolved values //incomingFriends is now an array of friends //next line would make the last element an array //friends.push(incoming); //you probably want to push every element of the array friends.push(...incomingFriends);
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!