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

616
Vistas
¡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 Respuestas
Responde la pregunta

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 Denunciar

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 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