Promise的Catch报错总结

2023-11-12

在使用Promise时,异步返回的结果可能会两种,一种是使用resolve返回,另一种是使用reject返回。

当使用reject返回时,会throw一个Error出来。

这时的这个Error需要Catch住。

在Promise中Catch一个Error有两种。

第一种是在Then的回调中定义第二个参数:

先定义一个PromiseTest.html文件:

在文件上写下代码:

<script type="text/javascript">
	new Promise((resolve, reject) => {
	setTimeout(() => {
		// resolve('hello');
		// console.log("test");
		reject('hello2');
		console.log("test2");
	}, 1000)
}).then(
	(res)=> {  // 成功
		console.log("成功1"+res);
		return res; //当我们需要在传参给后面的then时,可以使用return来返回值
	},
 	(err) => {  // 失败
 		console.log("失败1"+err)
 		// reject(".............")
 		throw new Error('抛出一个错1') //throw和return一样会返回后面的值,所以当我们需要在传参给后面的catch时,可以使用throw来返回值
 	}
).then(
	(res) => {  // 成功
		console.log("成功2"+res);
	},
 	(err) => {  // 失败
 		console.log("失败2"+err)
 	}
)
</script>

之后,双击“PromiseTest.html”,可以在网页上查看结果:

 

第二种是定义Catch回调函数:

把“失败2”的回调移除,加上Catch回调:

<script type="text/javascript">
	new Promise((resolve, reject) => {
	setTimeout(() => {
		// resolve('hello');
		// console.log("test");
		reject('hello2');
		console.log("test2");
	}, 1000)
}).then(
	(res)=> {  // 成功
		console.log("成功1"+res);
		return res; //当我们需要在传参给后面的then时,可以使用return来返回值
	},
 	(err) => {  // 失败
 		console.log("失败1"+err)
 		// reject(".............")
 		throw new Error('抛出一个错1') //throw和return一样会返回后面的值,所以当我们需要在传参给后面的catch时,可以使用throw来返回值
 	}
).then(
	(res) => {  // 成功
		console.log("成功2"+res);
	}
).catch(
  (err) => {  // 失败
    console.log("Catch.....失败2"+err)
})
</script>

运行结果:

 最后,再来一个测试:

把“失败2”加回来:

<script type="text/javascript">
	new Promise((resolve, reject) => {
	setTimeout(() => {
		// resolve('hello');
		// console.log("test");
		reject('hello2');
		console.log("test2");
	}, 1000)
}).then(
	(res)=> {  // 成功
		console.log("成功1"+res);
		return res; //当我们需要在传参给后面的then时,可以使用return来返回值
	},
 	(err) => {  // 失败
 		console.log("失败1"+err)
 		// reject(".............")
 		throw new Error('抛出一个错1') //throw和return一样会返回后面的值,所以当我们需要在传参给后面的catch时,可以使用throw来返回值
 	}
).then(
	(res) => {  // 成功
		console.log("成功2"+res);
	},
 	(err) => {  // 失败
 		console.log("失败2"+err)
 	}
).catch(
  (err) => {  // 失败
    console.log("Catch.....失败2"+err)
})
</script>

查看运行结果:

“Catch.....失败2”又调用不到了,可以Then的第二个参数会屏蔽他后面的Catch回调。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise的Catch报错总结 的相关文章

  • 在具有子项的“contenteditable”div 中设置插入符位置

    我有一个这样的 HTML 结构 div This is some plain boring content div 我还有这个函数 允许我将插入符位置设置到 div 中我想要的任何位置 Move caret to a specific po
  • 循环遍历数组并删除项目,而不中断 for 循环

    我有以下 for 循环 当我使用splice 要删除一个项目 我发现 秒 未定义 我可以检查它是否未定义 但我觉得可能有一种更优雅的方法来做到这一点 我们的愿望是简单地删除一个项目并继续 for i 0 len Auction auctio
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • Chrome 扩展程序可以相互通信吗?

    我正在编写一个Chrome扩展程序 并且想要实现一个接口或api 以便我将来制作的其他扩展程序可以使用它 最终的效果可能如下 分机 B 呼叫extensionA someMethod someParameters 并向分机A发送一些数据 分
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • 调用类实例方法 onclick javascript

    我有一个 javascript 文件 其中包含包含方法函数的类 我想知道如何从 onClick 事件调用类实例方法 function MyClass this instanceData Display Me this DisplayData
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • 仅在 Chrome 上我收到此错误:Uncaught TypeError: Illegal constructor [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我在 Chrome 上加载 jQuery 时 我会收到此错误 Uncaught TypeError Illegal constr
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • 如何在具有相同值的下拉菜单上触发 jQuery 更改事件

    即使用户选择相同的值 如何每次都触发 jQuery 更改事件 我需要刷新效果 例如如果用户选择Lawyer它会发出警报hello然后用户再次选择Lawyer从下拉菜单中 它应该发出警报hello 我怎样才能实现它 以下是代码 jQuery
  • 如何按 Angular 表中的属性(该属性具有单个 rownspan)进行分组?

    我没有找到这个问题的合适标题 我的问题是 例如 我有一个包含两列的表 列汽车品牌和列汽车型号 我希望表是 like in this picture 换句话说 品牌名称只会出现 1 次 我的输入数组采用以下 json 格式 brand Aud
  • Riak 在 MapReduce 查询中失败。使用哪种配置?

    我正在与 riak riak js 结合开发一个 nodejs 应用程序 并遇到以下问题 运行此请求 db mapreduce add logs run 正确返回存储在存储桶日志中的所有 155 000 个项目及其 ID logs 1GXt
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • 使 Bootstrap Popover 在悬停而不是单击时出现/消失

    我正在使用 Bootstrap 构建一个网站Popover http twitter github com bootstrap javascript html popovers我不知道如何使弹出窗口出现在悬停而不是单击时 我想做的就是当有人
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than

随机推荐

  • Python库的几种安装方法:Pycharm、Command Prompt、Anaconda Prompt、Anaconda Navigator;常用conda命令。

    学习目标 学会利用Pycharm Command Prompt Anaconda Prompt anaconda3 Anaconda Navigato来安装python库 Anaconda conda常用命令 学习内容 Python库的几种
  • [leetcode] 368. Largest Divisible Subset 解题报告

    题目链接 https leetcode com problems largest divisible subset Given a set of distinct positive integers find the largest sub
  • 半导体的过去、现在和未来

    文章来源 中科院半导体所 01 半导体是信息化的基础 上个世纪半导体大规模集成电路 半导体激光器 以及各种半导体器件的发明 对现代信息技术革命起了至关重要的作用 引发了一场新的全球性产业革命 信息化是当今世界经济和社会发展的大趋势 信息化水
  • VS2010 Win7 64位 C++ MFC DataGrid绑定实例

    纠结了几天的DataGrid绑定问题今天终于能跑出来了 我下载别人的代码 都可以跑 因为我是用VS2010 Win7 64位 的环境来学习 C MFC的 网上找的资料大都是VC6 0正面的 我下载的DataGrid例子都可以跑出来 一到我自
  • 解决pandas中to_excel 数据覆盖sheet表问题

    pandas解决to excel 数据覆盖sheet表问题 pandas将数据导入到excel时 会将原来的数据进行覆盖 解决这个问题的代码如下 import pandas as pd from openpyxl import load w
  • Lodop一款优秀的Web打印控件应用

    一 什么是lodop lodop取意自 load or print 是一款优秀的Web打印控件 在B S系统中 传统打印控件总是 页面看到什么才能打印什么 缺乏灵活性 使打印略显呆板 而使用lodop则可以做到 只看想看的 打印想打的 不仅
  • AI相关基础知识

    1 神经网络中的filter 滤波器 与kernel 内核 的概念 kernel 内核是一个2维矩阵 长 宽 filter 滤波器是一个三维立方体 长 宽 深度 其中深度便是由 多少张内核构成 两者之间的关系 可以说 kernel 是fil
  • Taro 2.2 全面插件化,支持拓展和定制个性化功能

    自 2 2 开始 Taro 引入了插件化机制 允许开发者通过编写插件的方式来为 Taro 拓展更多功能或者为自身业务定制个性化功能 欢迎大家进行尝试 共同讨论 当前版本 2 2 1 官方插件 Taro 提供了一些官方插件 tarojs pl
  • git每次提交需要输入账号密码

    git bash进入项目目录 执行命令 git config global credential helper store 命令配置好之后 再操作一次git pull 然后它会提示你输入账号密码 这一次之后就不需要再次输入密码了
  • 官方精简版!Windows 10 LTSC 2021 正式发布

    微软现已正式发布 Windows 10 企业版 LTSC 2021 LTSC 全称为 the Long Term Servicing Channel 即长期服务频道 使用 LTSC 服务模型 Windows 10 电脑可以延迟接收功能更新
  • 权限控制:自定义注解,AOP注入

    1 自定义注解 自定义注解可以写业务需要的函数逻辑 验证权限 自定义注解有两个必要的元注解 1 Target 用来描述注解的修饰范围 共四种 a TYPE 类 接口 enum b METHOD 方法 c PARAMETER 方法变量 d P
  • FATFS移植、调试过程(在STM32上使用W25Q64)

    上面是我的微信和QQ群 欢迎新朋友的加入 花了几天的时间好不容易自己移植好了FATFS 以前一般都是用别个现成的东西 真的自己移植还是有一点点的操蛋 移植FATFS其实不难 当然这是对于一个成功移植好的人来说 FATFS移植资料网上有一大堆
  • 如何获取变量token的值

    一 什么是token 1 客户端使用用户名跟密码请求登录 2 服务端收到请求 去验证用户名与密码 3 验证成功后 服务端会签发一个 Token 再把这个 Token 发送给客户端 4 客户端收到 Token 以后可以把它存储起来 比如放在
  • Getting Started with Formal Verification

    原文链接 https www eeweb com getting started with formal verification Methodology is the key in using formal property checki
  • 2023最新ChatGPT网站源码+支持ChatGPT4.0+支持Midjourney绘画+用户会员套餐+后台管理+一键更新版本

    2023最新ChatGPT网站源码 支持ChatGPT4 0 支持Midjourney绘画 用户会员套餐 后台管理 一键更新版本 支持手机电脑不同布局页面自适应 ChatGPT商用网站源码搭建安装教程 第一步 下载程序 ChatGPT商业运
  • 如何安装Centos7.9系统

    目录 一 背景 二 安装准备 1 主机硬件配置信息 2 Centos7 9系统安装盘 三 安装步骤 1 BIOS设置U盘启动 2 设置系统语言 3 设置系统安装位置 4 设置网络和主机名 5 设置ROOT用户密码 四 安装后验证 五 问题记
  • Java学习(对象与类)——文档注释,生成JavaDoc文件

    目录 注释的插入 类注释 方法注释 字段注释 通用注释 包注释 生成帮助文档JavaDoc 注释的插入 javadoc实用工具从下面几项中抽取信息 模块 包 公共类和接口 公共的和受保护的字段 公共的和受保护的构造器及方法 每个文档注释 包
  • 安装系统跳过创建用户,直接以超级管理员身份进入系统

    方法一 1 shift F10进入dos界面 2 输入net user administrator active yes 来启动超级管理员 3 输入regedit 来启动注册表 4 把如图下红框选项所有数值项改为0 5 接着退出注册表 输入
  • 运行时错误:Error: free(): invalid next size (fast)

    经查 这通常发生在C C 混合编程时候调用的内存分配 释放接口不配对时 即malloc分配的内存 却用了delete或者new出来的对象 却用了free 只要确保 malloc free new delete配对 该问题就消失了
  • Promise的Catch报错总结

    在使用Promise时 异步返回的结果可能会两种 一种是使用resolve返回 另一种是使用reject返回 当使用reject返回时 会throw一个Error出来 这时的这个Error需要Catch住 在Promise中Catch一个E