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

170
Visualizações
Forma correcta de pasar variables javascript

Tengo problemas para entender cómo javascript pasa variables. Tengo el siguiente código ejecutándose en un controlador express

 const { sessionID, defenderID, challengerID } = req.body; console.log('sessionID', sessionID); console.log('defenderID', defenderID); console.log('challengeID', challengerID); const newGame = await Game.start({ session: sessionID, defender: defenderID, challenger: challengerID });

que está llamando a la siguiente definición

 gameSchema.statics.start = async (session, defender, challenger) => { const date = new Date(); console.log('attempting to start a game'); console.log('session', session); console.log('defender', defender); console.log('challenge', challenger); const newGame = new Game({ defender: defender, challenger: challenger, startTime: date }); newGame.session.push(session); return await newGame.save().then((game) => game); }

mi salida es

 defenderID johndoe challengeID somechallenge attempting to start a game session { session: '620c29582ac275bd67cd3cca', defender: 'johndoe', challenger: 'somechallenge' } defender undefined challenge undefined

No estoy exactamente seguro de dónde me estoy equivocando aquí, ya que estaba haciendo referencia a otro fragmento de código que funciona bien al hacer esto.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Está pasando un objeto como un solo argumento al método Game.start en el momento de llamar a la función, pero en la declaración de su función espera 3 argumentos, es decir, sesión, defensor y retador. Dado que la session es el primer argumento en la declaración de su función, obtiene el objeto en console.log para la session .

Puede solucionarlo pasando todos los argumentos individualmente al llamar al método de esta manera:

 const { sessionID, defenderID, challengerID } = req.body; console.log('sessionID', sessionID); console.log('defenderID', defenderID); console.log('challengeID', challengerID); const newGame = await Game.start(sessionID, defenderID, challengerID);

Otra forma de solucionarlo sería cambiar la declaración de la función para aceptar un solo argumento que es un objeto y puede desestructurar las propiedades de esta manera

 gameSchema.statics.start = async ({ session, defender, challenger }) => { const date = new Date(); console.log('attempting to start a game'); console.log('session', session); console.log('defender', defender); console.log('challenge', challenger); const newGame = new Game({ defender: defender, challenger: challenger, startTime: date }); newGame.session.push(session); return await newGame.save(); }

Y luego puedes llamar al método como ya lo estás haciendo.

 const newGame = await Game.start({ session: sessionID, defender: defenderID, challenger: challengerID });

Además, no necesita usar .then después de llamar a .save() ya que ya está usando async await pattern y llamar await newGame.save() devolverá el documento del juego guardado.

 return await newGame.save();
about 4 years ago · Juan Pablo Isaza Relatório

0

El objeto completo se pasa al primer argumento (sesión con nombre):

 { session: sessionID, defender: defenderID, challenger: challengerID }

Puede cambiar la llamada a:

 const newGame = await Game.start(sessionID, defenderID, challengerID);

o definición de método para:

 async (obj) => { ... const newGame = new Game({ defender: obj.defender, challenger: challenger, startTime: date }); ...
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