当前位置: 首页 > news >正文

【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 链式调用来实现方法的调用和验证。

补充:

上述示例只是一个简单的实现思路,不代表具体业务逻辑。

问题场景存在局限性,仅作为自身解决问题的记录

http://www.lryc.cn/news/44794.html

相关文章:

  • Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 从redis到epoll到mmap
  • STM32CubeMX快速构造工程模板(一)
  • Java Web中的ServletContext对象
  • 回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测
  • 在小公司工作3年,从事软件测试5年了,才发现自己还是处于“初级“水平,是不是该放弃....
  • 基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
  • Book:实战Java高并发程序设计(第二版)
  • LeetCode 831. Masking Personal Information【字符串,正则表达式】中等
  • 递增三元组
  • java源码阅读 - TreeSet
  • 写毕业论文经验贴
  • 2.7 进程退出、孤儿进程、僵尸进程+2.8 wait函数+2.9 waitpid函数
  • 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店
  • 一个完整的渗透学习路线是怎样的?如何成为安全渗透工程师?
  • 刷完这60个标准库模块,成为Python骨灰级玩家
  • EasyExcel的简单使用(easyExcel和poi)
  • 命名空间 namespace
  • 我能“C”——初阶指针(上)
  • Android高级工程师工资为何让人艳羡不已
  • 什么猫猫最受欢迎?Python采集猫咪交易数据
  • 使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问
  • 行业盛会|2023中国(东莞)国际测量控制及仪器仪表展览会
  • redis集群 服务器重启测试
  • Diffusion的unet中用到的AttentionBlock详解
  • ElasticSearch索引文档写入和近实时搜索
  • 【C语言蓝桥杯每日一题】——等差数列
  • EM7电磁铁的技术参数
  • 选择很重要,骑友,怎么挑选骑行装备?
  • 【JUC面试题】Java并发编程面试题