使用Axios时validate函数返回值异常致邮箱修改功能故障
问题:邮箱修改验证逻辑始终进入错误分支
问题根源
你的validate函数执行的是异步HTTP请求,但函数本身没有返回异步操作的结果就直接结束了。emailChange里用同步的if (this.validate() == true)判断时,validate实际返回的是undefined,所以永远会进入else分支。那些then回调里的return true并不会改变validate函数的返回值,因为异步回调是在函数执行完成后才会触发的。
修复方案
- 让
validate返回一个Promise,在请求成功时返回true,失败时返回false; - 在
emailChange中用await(需要把函数标记为async)处理异步验证的结果,不能用同步判断。
修改后的代码
调整validate函数:
validate() { const data = JSON.stringify({ identifier: this.loggedInUser.email, password: this.password, // 注意:替换成用户输入的密码字段,不要硬编码 }); const config = { method: "post", url: "http://192.168.190.112:1337/api/auth/local", headers: { "Content-Type": "application/json", }, data: data, }; // 返回Promise,传递异步请求的结果 return this.$axios(config) .then(response => { console.log(JSON.stringify(response.data)); return true; }) .catch(error => { console.log(error); return false; }); }
调整emailChange函数:
async emailChange() { const isValid = await this.validate(); if (isValid) { const data = JSON.stringify({ email: this.email, }); this.put(data); } else { this.error = "Falsches Passwort"; this.snackbar = true; } }
额外提醒
原代码里validate的password是硬编码的"123456",完全没用到用户输入的密码,属于逻辑错误,必须替换成用户输入的对应字段(比如this.password),否则验证功能形同虚设。
内容的提问来源于stack exchange,提问作者Goldenfaeron
相关产品推荐
相关产品推荐

