javascript - React.js 和 Firebase 身份验证 : setTimeout Callback function not executed?

标签 javascript reactjs firebase-authentication callback settimeout

我有一个函数handleSubmit,用于处理在 React 组件中在 Firebase 中的注册。在内部,我想使用 setErrorTimeout 函数处理错误,该函数有一个 setTimeout,在本例中会在 3 秒后自动重置错误。

问题是,我的超时没有执行,例如超时内的回调函数在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 调用放在回调内部,尽管由于超时已经触发,所以并不严格需要它。

关于javascript - React.js 和 Firebase 身份验证 : setTimeout Callback function not executed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69228196/

相关文章:

javascript - 是否可以只为某些特定的 div 应用脚本和链接

JavaScript:对于对象中的每个对象?

javascript - Reactjs - 在内联 CSS 中设置过渡

javascript - 删除表单内字符串两端的空格 - React

android - 如何解决错误 "Projects created at console.firebase.google.com must use the new Firebase Authentication SDKs"

javascript - HighCharts OHLC - 我可以使用 JSON 数据提供每个点的颜色信息吗?

javascript - 访问对象中的数据并使用过滤后的数据创建新对象

reactjs - React - Json 架构表单下拉列表最初不会加载,除非我使用 SetTimeout 函数

ios - Firebase Auth stateListener 必要吗?

Swift Firebase 4.0-observeSingleEvent 不返回数据集(但身份验证正在工作)