【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
JavaScript使用promise顺序调用函数并抛出异常
场景
新建或者编辑时,一个页面中存在多个表单,每个表单都有单独进行表单验证。点击提交时,若有一个表单校验失败,则不能提交。
ps:为啥不放在一个表单中?
(⊙o⊙)…旧项目改造,业务实现中存在嵌套在多个折叠面板中的form表单,且部分表单验证会影响后续表单的验证
实现思路
可以使用 Promise 的链式调用来实现这个功能。即在前一个函数的then回调中调用后一个方法,最后通过catch抛出错误。
具体示例
<script>function validateMethod1() {return new Promise((resolve, reject) => {// 验证方法一的代码let temp1 = Math.random() * 10console.log('temp1', temp1)const isValid = temp1 > 5; // 假设验证方法一通过if (isValid) {resolve();} else {reject(new Error("验证方法一失败"));}});}function validateMethod2() {return new Promise((resolve, reject) => {let temp2 = Math.random() * 10console.log('temp2', temp2)// 验证方法二的代码const isValid = temp2 > 6; // 假设验证方法二通过if (isValid) {resolve();} else {reject(new Error("验证方法二失败"));}});}validateMethod1().then(() => validateMethod2()).then(() => {console.log("两个方法都验证通过了");}).catch((error) => {console.error(error.message);});
</script>
上面的代码中,先定义了两个验证方法 validateMethod1 和 validateMethod2,它们都返回 Promise 对象。在 Promise 链式调用中,先调用 validateMethod1,如果验证通过就继续调用 validateMethod2,最后在链式调用的最后一个 then 方法中输出成功信息。如果在验证方法中出现错误,则会被捕获并输出错误信息。
为什么每一个方法中都需要return一个promise?
是的,每一个方法都需要返回一个 Promise 对象。Promise 是 JavaScript 中的一种异步编程解决方案,可以很好地处理异步代码的执行顺序和结果传递等问题。
在上面的例子中,validateMethod1 和 validateMethod2 都返回了一个 Promise 对象,并在验证通过时调用 resolve 方法,在验证失败时调用 reject 方法,并传入一个错误对象。这样,在链式调用中,当一个方法验证通过时,就会继续执行下一个方法,如果有一个方法验证不通过,就会在链式调用中捕获到错误并输出错误信息。
如果一个方法没有返回 Promise 对象,就无法使用 Promise 链式调用来串联多个方法。因此,每一个方法都需要返回一个 Promise 对象,以便能够使用 Promise 链式调用来实现方法的调用和验证。
补充:
上述示例只是一个简单的实现思路,不代表具体业务逻辑。
问题场景存在局限性,仅作为自身解决问题的记录
相关文章:
【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
JavaScript使用promise顺序调用函数并抛出异常 场景 新建或者编辑时,一个页面中存在多个表单,每个表单都有单独进行表单验证。点击提交时,若有一个表单校验失败,则不能提交。 ps:为啥不放在一个表单中? (…...
Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能…...
从redis到epoll到mmap
redis为什么这么快? 比较容易答出的答案 1)纯粹的内存操作 2)单线程操作,不用考虑线程切换 其他优势 3)I/O 多路复用,使用epoll 4)Reactor 设计模式 I/O 多路复用有三种 select、poll、epoll select:使用数组存储轮询 poll:使用链表轮询 epo…...
STM32CubeMX快速构造工程模板(一)
STM32CubeMX作为一个免费开源的软件,能够可视化配置STM32或其他产品硬件资源,能过快速地构造工程模板,很是方便!!! 目录 STM32CubeMX快速构造工程模板 首先第一步,打开软件-点击按钮-输入型号-双击打开。...
Java Web中的ServletContext对象
目录 ServletContext对象 获取上下文初始化参数的相关方法 创建ServletContext对象 1)通过 GenericServlet 提供的 getServletContext() 方法 2)通过 ServletConfig 提供的 getServletContext() 方法 3)通过 HttpSession 提供的 getServletCo…...
回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测
回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测 目录回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测 粒子…...
在小公司工作3年,从事软件测试5年了,才发现自己还是处于“初级“水平,是不是该放弃....
毕业前三年,从早到晚,加班到深夜,一年又一年,直至刚入职场的首个黄金三年过年都去了,而职位却仍在原地踏步。尽管感觉自己努力过,但是实际上,自身的能力从没得到过多少提升。 所以在无数个夜晚…...
基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
本文目录一、什么是对比度二、什么是颜色直方图三、如何通过RGB计算颜色对比度什么是HSV、Lab颜色空间四、OpenCV代码五、Java代码5.1 平滑处理5.2 完整代码一、什么是对比度 对比度是指图像中不同区域之间的明暗差异程度,它是图像质量中的重要指标之一。除了颜色对…...
Book:实战Java高并发程序设计(第二版)
实战Java高并发程序设计(第二版)为什么会有并行计算?并行计算需要回答的问题基本概念并发级别有哪些?Amdahl定律和Gustafson定律Java并发三特性进程和线程线程的生命周期Thread类run()与start()的区别为什么会有并行计算ÿ…...
LeetCode 831. Masking Personal Information【字符串,正则表达式】中等
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
递增三元组
[蓝桥杯 2018 省 B] 递增三元组 题目描述 给定三个整数数组 A[A1,A2,⋯,AN]A [A_1, A_2,\cdots, A_N]A[A1,A2,⋯,AN],B[B1,B2,⋯,BN]B [B_1, B_2,\cdots, B_N]B[B1,B2,⋯,BN],C[C1,C2,⋯,CN]C [C_1, C_2,\cdots,C_N]C[C1,C2,⋯,CN…...
java源码阅读 - TreeSet
往期文章 用最简单的话讲最明白的红黑树java源码阅读 - HashMap数据结构 - 堆与堆排序 文章目录往期文章一、介绍二、类的声明三、成员变量四、构造函数五、常用方法1. NavigableSet接口的实现2. SortedSet接口的实现六、总结一、介绍 在上期文章中,我们从源码层面…...
写毕业论文经验贴
首先说一句不要靠近word,会变得不幸。最好用latex写,不过我当时懒得下载latex了,于是后期改格式花了点时间 写论文之前 事先把所有的论文都查好并且整理好,论文第一、二章写起来就会很快; 把实验做顺溜,实…...
2.7 进程退出、孤儿进程、僵尸进程+2.8 wait函数+2.9 waitpid函数
1.进程退出 子进程退出时:父进程帮助子进程回收内核区的资源 exit.c /*#include <stdlib.h>void exit(int status);#include <unistd.h>void _exit(int status);status参数:是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取…...
【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:预订酒店 题目 放暑假了,橡…...
一个完整的渗透学习路线是怎样的?如何成为安全渗透工程师?
前言 1/我是如何学习黑客和渗透? 我是如何学习黑客和渗透测试的,在这里,我就把我的学习路线写一下,让新手和小白们不再迷茫,少走弯路,拒绝时间上的浪费! 2/学习常见渗透工具的使用 注意&…...
刷完这60个标准库模块,成为Python骨灰级玩家
python强大,主要是因为包多,且不说第三方包,单是标准库就已让人望而生畏。 如果从第一篇整理标准库的博客算起,如今已有三个年头。在整理标准库的过程中,查阅了大量资料和官方文档,很多中文资料都有一个共…...
EasyExcel的简单使用(easyExcel和poi)
EasyExcel的简单使用 前言 Excel读 1.实体类 2.读监听器与测试类 3.输出结果 Excel写 1.实体类 2.写入Excel的测试类 3.输出结果 填充Excel 1.Excel模板 2.测试类 3.输出结果 前言 EasyExcel类是一套基于Java的开源Excel解析工具类,相较于传统的框架如Apache poi、…...
命名空间 namespace
一、命名空间的定义 定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员。 1.一般定义 namespace test {int a 10;int b 100;int ADD(int x, int y){return x y;} }…...
我能“C”——初阶指针(上)
目录 1.什么是指针? 2. 指针和指针类型 3.野指针 3.1野指针的成因 3.2 如何规避野指针 1.什么是指针? 指针理解的2个要点: 1. 指针是内存中一个最小单元的编号,也就是地址 2. 平时口语中说的指针,通常指的是指针…...
自托管小说创作平台部署指南:从Docker到API集成
1. 项目概述:一个为小说创作者量身打造的全能工具箱最近在折腾一个个人项目,想搭建一个私有的、功能全面的小说创作与管理平台。作为一个深度文字爱好者兼技术从业者,我受够了在各种零散的文档、表格和笔记软件之间来回切换,也厌倦…...
游戏大世界别再只盯着算法了!聊聊Houdini PCG管线搭建中那些让人头大的‘流程债’
游戏大世界开发中的Houdini PCG管线:如何规避"流程债"陷阱 当技术美术团队第一次将Houdini引入游戏大世界项目时,往往会被其强大的程序化生成能力所震撼——地形自动生成、植被智能分布、建筑群快速布局,这些传统上需要数周手工完成…...
Audacity音频编辑:从新手到专业创作者的免费音频处理方案
Audacity音频编辑:从新手到专业创作者的免费音频处理方案 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 你是否曾经想过编辑一段音频,却因为昂贵的软件而却步?或者想要录制播客…...
WinFlexBison:在Windows上轻松构建专业级词法分析与语法生成器
WinFlexBison:在Windows上轻松构建专业级词法分析与语法生成器 【免费下载链接】winflexbison Main winflexbision repository 项目地址: https://gitcode.com/gh_mirrors/wi/winflexbison 你是否曾在Windows平台上为缺少Flex和Bison工具而烦恼?当…...
3分钟掌握:U校园智能刷课自动化终极实战指南
3分钟掌握:U校园智能刷课自动化终极实战指南 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为重复的网课练习消耗宝贵时间而烦恼吗?AutoUnipus智能刷…...
workout-cool项目实战:构建自动化运动数据流,打通健康管理与效率工具
1. 项目概述与核心价值 最近在健身圈和开发者社区里,一个叫“workout-cool”的项目热度悄然攀升。乍一看这个标题,你可能会觉得它只是一个简单的健身记录工具,但当你真正深入进去,会发现它远不止于此。作为一个长期在健康科技和效…...
Power BI主题模板完全指南:35+ JSON模板快速构建专业数据可视化方案
Power BI主题模板完全指南:35 JSON模板快速构建专业数据可视化方案 【免费下载链接】PowerBI-ThemeTemplates Snippets for assembling Power BI Themes 项目地址: https://gitcode.com/gh_mirrors/po/PowerBI-ThemeTemplates 在数据驱动的商业决策时代&…...
崩坏星穹铁道终极自动化指南:三月七小助手完整使用教程
崩坏星穹铁道终极自动化指南:三月七小助手完整使用教程 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁道》中繁琐的日常…...
弱引用TWeakObjectPtr原理
弱引用的原理:从通用思路到 UE TWeakObjectPtr 原理总结: !!#ff0000 UE 的 GC 体系有一张全局对象表 GUObjectArray,弱引用存了一个索引,以及这个物体创建时的序列号,简单来说是不是弱引用先拿着索引去序列号找一下&am…...
Purpur性能调优实战指南:7大核心优化方案深度解析
Purpur性能调优实战指南:7大核心优化方案深度解析 【免费下载链接】Purpur Purpur is a drop-in replacement for Paper servers designed for configurability, and new fun and exciting gameplay features. 项目地址: https://gitcode.com/gh_mirrors/pu/Purpu…...
