异步函数ChangePassword执行成功却始终返回false问题求助
问题修复:ChangePassword函数无法正确返回true
你的核心问题是函数在异步操作完成前就返回了初始值:虽然ChangePassword声明了async,但内部用then链式调用处理异步逻辑时,没有等待这些异步操作完成,函数就直接返回了初始的res=false。后续异步操作里修改res=true的动作,根本不会影响已经返回的结果。
修复后的ChangePassword函数
把then链式调用替换成await,用try-catch统一处理错误,确保函数能等待异步操作完成后再返回正确结果:
async function ChangePassword(data) { const auth = getAuth(); try { const credential = EmailAuthProvider.credential( auth.currentUser.email, data.oldPassword ); // 等待重新认证完成 await reauthenticateWithCredential(auth.currentUser, credential); // 等待密码更新完成 await updatePassword(auth.currentUser, data.password); toast.success("Password changed successfully"); return true; } catch (error) { toast.error(error.message); return false; } }
简化调用逻辑
调用方changePassword可以去掉多余的.then,直接用await获取返回值判断:
async function changePassword() { if (password === "" || confirmPassword === "" || oldPassword === "") { toast.error("Please fill all the fields"); } else if (password !== confirmPassword) { toast.error("Passwords do not match"); } else { let data = { oldPassword, password }; const res = await ChangePassword(data); if (res === true) { setChangePasswordModal(false); setOpen(false); } } }
关键说明
await会暂停函数执行,直到异步操作完成,确保后续代码能拿到正确的结果try-catch能统一捕获重新认证、密码更新过程中出现的所有错误,避免遗漏- 去掉了冗余的
res变量,成功时直接返回true,失败时返回false,逻辑更清晰
内容的提问来源于stack exchange,提问作者SahilN
相关产品推荐
相关产品推荐

