You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异步函数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);
    }
  }
}

关键说明

  1. await会暂停函数执行,直到异步操作完成,确保后续代码能拿到正确的结果
  2. try-catch能统一捕获重新认证、密码更新过程中出现的所有错误,避免遗漏
  3. 去掉了冗余的res变量,成功时直接返回true,失败时返回false,逻辑更清晰

内容的提问来源于stack exchange,提问作者SahilN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:26:28