form 表单验证是异步问题记录(推荐)

 更新时间:2023年01月13日 15:23:04   作者:CryptoCode lv-4  
这篇文章主要介绍了form 表单验证是异步问题记录,通过实例代码介绍了Promise.all 和 Promise.allSettled 区别,需要的朋友可以参考下

form 表单验证是异步的

const submit = () => {
    // 验证器A
    const validateA = () => {
        quotationSettingFormRefA.value.validate((valid: boolean) => {
            if (valid) {
                data.validA = true
            } else {
                data.validA = false
            }
            console.log(data.validA, 'validateA')
        })
    }

    // 验证器B
    const validateB = () => {
        quotationSettingFormRefB.value.validate((valid: boolean) => {
            if (valid) {
                data.validB = true
            } else {
                data.validB = false
            }
            console.log(data.validB, 'validateB')
        })
    }
    // 等待两个验证结束之后再进行提交
    Promise.all([validateA(), validateB()]).then(() => {
        console.log(data.validA, data.validB, 'valid')
	})
}

从截图可以发现是先执行了 then 里面的代码,然后再是验证器,说明form验证器是异步的,所以这种情况会影响提交,接着换另外一种方式

const submit = () => {
    const validateA = () => {
        return new Promise((resolve) => {
            quotationSettingFormRefA.value.validate((valid: boolean) => {
                if (valid) {
                    data.validA = true
                } else {
                    data.validA = false
                }
                resolve(valid)
                console.log(data.validA, '左边验证')
            })
        })
    }

    // 右边验证
    const validateB = () => {
        new Promise((resolve) => {
            quotationSettingFormRefB.value.validate((valid: boolean) => {
                if (valid) {
                    data.validB = true
                } else {
                    data.validB = false
                }
                resolve(valid)
                console.log(data.validB, '右边验证')
            })
        })
    }
    // 等待两个验证结束之后再进行提交
    Promise.all([validateA(), validateB()]).then((res) => {
        console.log(data.validA, data.validB, 'valid', res)
    })
}

Promise.allPromise.allSettled 区别

Promise.allSettled([validateA(), validateB()]).then((res) => {
    console.log(data.validA, data.validB, 'valid', res)
})

  • Promise.all 有一个成功,后面就断掉了
  • Promise.allSettled 也是有一个成功,后面也断掉了
  • 不一样的就是两这种返回值:all 返回单个值,allSettled 返回对象

到此这篇关于form 表单验证是异步问题记录的文章就介绍到这了,更多相关form 表单验证异步内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vuex存储数据的几种方法实例详解

    vuex存储数据的几种方法实例详解

    在浏览网页时我们有些时候需要记住一些用户选择的信息,比如登陆时我们如果选择了记住密码,那么我们下次进入该网页时就会有你上次的登陆信息,下面这篇文章主要给大家介绍了关于vuex存储数据的几种方法,需要的朋友可以参考下
    2022-10-10
  • 使用Element进行前端开发的详细图文教程

    使用Element进行前端开发的详细图文教程

    众所周知Element是一套Vue.js后台组件库,它能够帮助你更轻松更快速地开发后台项目,下面这篇文章主要给大家介绍了关于使用Element进行前端开发的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Vue PostCSS的使用介绍

    Vue PostCSS的使用介绍

    postcss一种对css编译的工具,类似babel对js的处理,postcss只是一个工具,本身不会对css一顿操作,它通过插件实现功能,autoprefixer就是其一
    2023-02-02
  • vue实现简易计算器的4种方法举例

    vue实现简易计算器的4种方法举例

    这篇文章主要给大家介绍了关于vue实现简易计算器的4种方法,文中通过代码介绍的非常详细,对大家学习或者使用vue觉有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • vue3项目目录结构示例详解

    vue3项目目录结构示例详解

    更好的了解项目的目录结构,能更好的去开发项目,下面这篇文章主要给大家介绍了关于vue3项目目录结构的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • vue3如何实现PDF文件在线预览功能

    vue3如何实现PDF文件在线预览功能

    PDF文件在线预览的功能相信大家都是有遇到过的,下面这篇文章主要给大家介绍了关于vue3如何实现PDF文件在线预览功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • vue+axios 拦截器实现统一token的案例

    vue+axios 拦截器实现统一token的案例

    这篇文章主要介绍了vue+axios 拦截器实现统一token的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue.js中使用${}实现变量和字符串的拼接方式

    Vue.js中使用${}实现变量和字符串的拼接方式

    这篇文章主要介绍了Vue.js中使用${}实现变量和字符串的拼接方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • axios模块化封装实例化及vue本地解决跨域方案

    axios模块化封装实例化及vue本地解决跨域方案

    这篇文章主要为大家介绍了axios模块化封装实例化及vue本地解决跨域示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Vue 2.0学习笔记之使用$refs访问Vue中的DOM

    Vue 2.0学习笔记之使用$refs访问Vue中的DOM

    这篇文章主要介绍了Vue 2.0学习笔记之使用$refs访问Vue中的DOM,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论