【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常

news/2024/7/11 1:16:31 标签: javascript, 前端, es6

JavaScript使用promise顺序调用函数并抛出异常

场景

新建或者编辑时,一个页面中存在多个表单,每个表单都有单独进行表单验证。点击提交时,若有一个表单校验失败,则不能提交。
ps:为啥不放在一个表单中?
(⊙o⊙)…旧项目改造,业务实现中存在嵌套在多个折叠面板中的form表单,且部分表单验证会影响后续表单的验证

实现思路

可以使用 Promise 的链式调用来实现这个功能。即在前一个函数的then回调中调用后一个方法,最后通过catch抛出错误。

具体示例

javascript"><script>
  function validateMethod1() {
    return new Promise((resolve, reject) => {
      // 验证方法一的代码
      let temp1 = Math.random() * 10
      console.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() * 10
      console.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.niftyadmin.cn/n/187581.html

相关文章

Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)

一、Qt按钮小程序 1. 按钮的创建和父子关系 在Qt程序中&#xff0c;最常用的控件之一就是按钮了&#xff0c;首先我们来看下如何创建一个按钮&#xff1a; #include <QPushButton>QPushButton * btn new QPushButton; //设置父亲btn->setParent(this);//设置文字b…

易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办?

易语言支持库配置闪退打不开怎么办&#xff1f; 易语言支持库配置闪退解决方法丨支持库配置崩溃_易语言打开支持易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办? 很多人都遇到过 打开易语言支持库安装菜单报错退出的问题 今天教大家解决方法 我们…

南大通用数据库-Gbase-8a-学习-32-gccli客户端

目录 一、测试环境 二、参数介绍 1、-u &#xff08;1&#xff09;含义 &#xff08;2&#xff09;例子 2、-h &#xff08;1&#xff09;含义 &#xff08;2&#xff09;例子 3、-P &#xff08;1&#xff09;含义 &#xff08;2&#xff09;例子 4、-D &#xff0…

2022 ICPC ECFinal总结

其实是在2023年打的 运气还算不错&#xff1f;金牌倒2&#xff0c;非常刺激。这场大家伙儿封榜之后真是一个比一个猛 论被催着写游记是怎样的体验&#xff08;笑&#xff09; Day-1 芜湖&#xff0c;起飞&#xff01; 上午十一点起飞的飞机&#xff0c;落地之后打了个车去酒店…

图解redis服务器(1)

目录 1.引言 2.命令请求的执行的过程 3.发送命令请求 4.读取命令请求 5.命令执行器&#xff08;查找命令实现&#xff09; 6.执行预备操作 7.调用命令函数 8.执行后续操作 9.返回客户端and 打印命令回复 1.引言 Redis服务器负责与多个客户端建立网络连接&#xff0c;处理…

《扬帆优配》机构动向 机构坚定看好芯片股后市

业内人士以为&#xff0c;因为职业存在回转预期&#xff0c;后续又有新资金入场预期&#xff0c;假如上市公司的业绩可以佐证职业开展前景&#xff0c;芯片板块的行情有望向纵深演绎 近期商场走出分解行情&#xff0c;新能源板块继续下行&#xff0c;国企龙头股以及ChatGPT概念…

java基于nacos手动分发任务给多个执行器实例

开发需求大致如下&#xff1a; 轮询策略可以自行更改&#xff0c;这个流程图是chatGPT自动生成的&#xff0c;目前我的代码逻辑是优先分发任务数少的执行器 ---------------------| 监控器 |---------------------||1. 监控器接收到任务|v---------------------|…

深度学习中的卷积神经网络

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…