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

308
Vistas
¿Cuál es la diferencia entre pasar un argumento como objeto frente a una cadena en una función?

Tengo a continuación un método que registra a un usuario con su correo electrónico y contraseña y crea un documento en Firebase cuando el usuario ingresa su información en un formulario y hace clic en enviar:

 const onSubmitHandler = async (e) => { e.preventDefault(); try { const { user } = await createAuthUserWithEmailAndPassword(email, password); console.log(user, 'user') await createUserDocumentFromAuth(user, { displayName }) }catch(err) { if(err === 'auth/email-already-in-use') { alert('Account with this email already exists'); return; }else { console.log(err) } } }

Para esta función llama:

 await createUserDocumentFromAuth(user, { displayName })

donde displayName puede ser una cadena, como ElonMusk . En el createUserDocumentFromAuth real, llamo al método setDoc, que es uno de Firebase para establecer un documento de usuario:

 export const createUserDocumentFromAuth = async ( userAuth, additionalInfo = {} ) => { if(!userAuth) return; console.log(additionalInfo, 'additionalInfo') const userDocRef = doc(db, 'users', userAuth.uid); const userSnapshot = await getDoc(userDocRef); if(!userSnapshot.exists()) { const { displayName, email } = userAuth; const createdAt = new Date(); try { // set the doc here await setDoc(userDocRef, { displayName, email, createdAt, ...additionalInfo }); } catch(err) { console.log('err creating the user', err) } }; return userDocRef; }

La razón por la que pasé { displayName } manualmente es porque hay un caso en el que la respuesta del servidor a createAuthUserWithEmailAndPassword(email, password) tiene displayName null , pero queremos que el usuario tenga un displayName registrado en la base de datos.

Mi pregunta es:

  1. ¿Por qué displayName solo funciona cuando se pasa como un objeto y no solo en su forma normal? Por ejemplo:
 await createUserDocumentFromAuth(user, { displayName })

reemplazará el displayName: null Pero no cuando paso:

 await createUserDocumentFromAuth(user, displayName)
  1. ¿Cómo se llama esta técnica en JavaScript?
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si observa createUserDocumentFromAuth , verá que espera dos argumentos userAuth e additionalInfo , se espera que ambos argumentos sean objetos.

Luego usa datos de AdditionalInfo para additionalInfo /sobrescribir cualquier cosa en userAuth cuando llama al método setDoc() .

Entonces, recomendaría agregar

 console.log(userDocRef, { displayName, email, createdAt, ...additionalInfo });

para ver qué datos se envían a setDoc()

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