ElementUI-Plus使用validate自定义校验规则异步问题(axios)采坑记录

需求很简单,在注册时检测用户名是否已经注册,在input框下边进行校验
在这里插入图片描述

代码结构:

 let validateUser1 = async (rule, value, callback) => {
                if (value === '') {
                     return callback(new Error('请输入用户名'))
                } else {
                    if (value) {
                      request({url:'/user/judgeName', methods:'get', params:{uname:value}
                      }).then(response=>{
                        console.log(response.data)
                        if (response.data.data === "hasname") {
                          console.log("1")
                          callback(new Error('该用户名已经被注册'))
                        } else {
                          console.log("2")
                          callback()
                        }
                      })
                    }
                   console.log("首先执行我")
                }

数据库中已有admin用户名,此时输入admin应当提示已注册,但结果并没有,反而显示校验成功。
在这里插入图片描述
通过控制台发现前台查询到了后台接口提供的数据,也进入到了用户名已经注册的循环分支,但是却先执行的是最后一行的console.log("首先执行我").
在这里插入图片描述
苦思良久,在阅读了async/await和Promise讲解这篇博客以及看了一堆参考文档以后。发现少了一个关键字await:写在async内部,等待一个异步方法执行完成。async、await配合将异步强行转换为同步处理。
更改代码在axios请求request前加上await:

  await request({url:'/user/judgeName', methods:'get', params:{uname:value}

校验成功
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雅痞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值