Tengo una función handleSubmit que maneja el registro en Firebase en un componente de reacción. En el interior, quiero manejar los errores con mi función setErrorTimeout , que tiene un setTimeout que restablece el error automáticamente después de 3 segundos en este caso.
El problema es que mi tiempo de espera no se ejecuta, por ejemplo, la función de devolución de llamada dentro del tiempo de espera no se ejecuta después de 3 segundos, pero todo lo demás sí... ¿por qué?
const handleSubmit = async e => { e.preventDefault() console.log(formDetails) if (formDetails.password !== formDetails.passwordrepeat) { setErrorTimeout(setRegisterError, { message: 'Passwords do not match!', }) return } console.log('Try') console.log(formDetails.email, formDetails.password) try { auth.createUserWithEmailAndPassword( formDetails.email, formDetails.password ) .then(userCredentials => { if (userCredentials) { const user = userCredentials.user let success = user.sendEmailVerification() console.log('success register:', success) setRegisterSuccess( 'You registered successfully! please check your email!' ) setFormDetails({}) } }) .catch(error => { console.log('ERROR!') setErrorTimeout(error) }) } catch (e) { setErrorTimeout(e) } } const setErrorTimeout = error => { console.log('inside timeout!') setRegisterError(error) const timer = setTimeout(() => { console.log('inside cb!') setRegisterError(null) }, 3000) clearTimeout(timer) console.log('after timeout!') }Está borrando el tiempo de espera justo después de crearlo aquí:
const timer = setTimeout(() => { console.log('inside cb!') setRegisterError(null) }, 3000) clearTimeout(timer) Probablemente desee que la llamada clearTimeout esté dentro de la devolución de llamada, aunque ni siquiera es estrictamente necesaria ya que el tiempo de espera ya se disparó.