React.js 和 Firebase auth: setTimeout 回调函数未执行?

React.js and Firebase auth: setTimeout Callback function not executed?

我有一个函数 handleSubmit 可以在 React 组件中处理在 Firebase 中的注册。在内部,我想用我的 setErrorTimeout 函数处理错误,在这种情况下,它有一个 setTimeout 在 3 秒后自动重置错误..

问题是,我的Timeout没有被执行,比如timeout里面的回调函数在3秒后没有被执行,但是其他的都是..为什么?

    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!')
}

您在此处创建超时后立即清除:

const timer = setTimeout(() => {
    console.log('inside cb!')
    setRegisterError(null)
}, 3000)
clearTimeout(timer)

您可能希望 clearTimeout 调用在回调中,尽管它甚至不是严格需要的,因为超时已经触发。