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

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

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 Relatório

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