前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elementUI 表单校验在await中变成异步的情况

elementUI 表单校验在await中变成异步的情况

作者头像
Qwe7
发布2022-06-09 08:39:35
2K0
发布2022-06-09 08:39:35
举报
文章被收录于专栏:网络收集

引言

最近,在项目中遇到了一个问题。在表单校验中调用await方法,并调用接口,在得到接口的返回值时,返回一些数值给上一层函数。但是由于elementUI的表单验证内部的某些原因,导致本该是同步的方法变成了异步的。

直接上代码

按照正常的理解,这个地方应该是没有问题的,但是从结果上却是啪啪打脸。一直拿不到应该拿到的结果

而后自己写了个demo测试

代码语言:javascript
复制

async buttonTest() {
    let submitLess = false
    submitLess = await this.testTest()
    console.log(submitLess)
    console.log('-----------')
}
async testTest() {
    let test1 = false
    console.log('11111111111111', test1)
    await this.$refs['infoForm'].validate(valid => {
        if (valid) {
            test1 = this.test()
            console.log('AAAAAAAAAA', test1)
        }
    })
    console.log('22222222222', test1)
    return test1
}
test() {
    let test123 = 111
    const params = {}
    await getList(params).then(async(res) => {
        if (res.data.code === 'success') {
            test123 = true
        } else {
            test123 = false
        }
    })
    console.log('tttttttttttttttt', test123)
    return test123
}

从这里的例子上看,elementUI的回调函数确实是个同步函数,这个没有任何的问题。

但是这个例子和项目上的例子的差距在于

代码语言:javascript
复制
// 例子
await this.$refs['infoForm'].validate(valid => {
        if (valid) {
            test1 = this.test()
            console.log('AAAAAAAAAA', test1)
        }
    })
// 项目
await this.$refs['infoForm'].validate(async(valid) => {
        if (valid) {
            test1 = await this.test()
            console.log('AAAAAAAAAA', test1)
        }
    })

于是,我代码改成了项目上类似的样子,然后运行,好的,问题出来了

这段表单验证的代码变成异步的了!

而如果需要让他依旧是同步的话,则需要将代码改成如下这样

代码语言:javascript
复制

await this.$refs['infoForm'].validate().then(async(valid) => {
        if (valid) {
            test1 = await this.test()
            console.log('AAAAAAAAAA', test1)
        }
    })

具体原因,应该是表单校验里面的回调函数那部分代码,在用了await的情况下,会变成异步函数。所以elementUI在后续加上了一步判断,如果validate里面传了参数(回调函数),那就正常走回调函数的步骤,如果没有传参,则返回一个promise函数。具体还是要看源码,这里就不多赘述了

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档