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
调用在回调中,尽管它甚至不是严格需要的,因为超时已经触发。
我有一个函数 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
调用在回调中,尽管它甚至不是严格需要的,因为超时已经触发。