【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. 平时口语中说的指针,通常指的是指针…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
