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

310
Views
¿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 answers
Answer question

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