网站首页 > 博客文章 正文
Promise.prototype.catch()。
在前面就完成了 promise a 加规范的 promise。很多朋友让我写一下 catch 和 finally,也写一下。这两个东西不属于 promise a 加规范,它是 ES6 的 promise 新增的。既然写它们,后面我也会把这些竞拍方法也写了,any 这些都会写一下。
1. 先来看一下 MDN 文档上面的,由于它不属于 promess a 加规范,所以 promess a 加规范里面并没有描述它们相关的东西,就到 MDN 上面来看一下。
2. catch 用于注册一个 promise 被拒绝的时候调用的函数,并且它会返回一个等效的 promise 对象,就是可以去练试调用。这个方法是这个的一种简写,就是认的第二个参数。第一个参数就可以忽略掉了,因为需要监听拒绝的时候,注册一个在拒绝的时候调用的函数,所以只需要传第二个就可以了。
3. 对着文档就来实现一下,其实也蛮简单的,来实现一下。加一个 catch,catch 接收一个 unrejected 的,接收一个回调,回调就直接传给第二个函数就可以,就是传给认的第二个参数就可以了。
4. 然后返回一个新的 promise,promise 是一个成功的,就是 catch 返回的 promise 就已经成功了,和认是一样的,认第二个参数调用的时候也是成功的。
5. 来试一下,改成自己的 promise,p 点 catch,error,log,来试一下,刨出来一个 error,就是这边打印出来的。
其实调用这个 case 之后后面就是成功的了,就是 result,需要在这边返回,要是有返回值就会传递下来,比如返回一个 2,来试一下,这样就可以了。
然后来试一下,它跟官方的 promise 是不是一样的,返回一个 error 就可以了,打印一个 error,打印个 2,是一样的,这样 catch 就完成了。
完成 catch 之后再看一下下一个,就是 finally,finally 是什么时候执行的?不管执行了认还是执行了 cash,最终都会调用 finally,实际上是这样的,这边也说了,finally 这个方法类似于调用了这个,就是调用这个认,第一个参数传的也是这个函数,第二个参数传的也是这个函数,因为无论是在成功或者失败的时候都要执行,所以这个函数直接就传给它们两个就可以。
但是它还有几个不同的地方,什么不同的地方?就是在创建这个函数的时候可以只将其传入一次,而不是强制声明两次或者创建一遍。什么意思?就是平时这样点赞的时候是不是直接在这里就写函数了,但是要是写一样的函数,得在这里声明两个函数或者创建一个变量,就像这样把这两个函数传过去。
第二个不同的地方就是这个函数不接受任何参数,就是它是个没有参数的,所以也不关心这个东西是成功的还是拒绝的,所以不需要去提供。
第三个就是 finally,这个方法是透明的,不会改变原始的 promise 状态,就是原来的 promise 是什么状态?返回的新的 promise 还是什么状态?是这样的。
6. 按照这几点来写一下,在这里加 finally,返回个什么东西?实际上还是返回 promise,成功的时候也执行函数,失败的时候也执行函数。但是这样写还是有点问题,什么问题?首先 onFinally 不接受任何的参数,所以要这样写,就是不能接受参数。虽然这个点认是有参数的,但是不接受,所以就写成这个样子。
7. 但是返回的新的 promise 的状态要和这边是一样的,所以在认里面要返回上一次的状态,这边也是一样的,也不接受参数,但是这里是有的,所以在这边要调用。由于需要保持状态,可能会这样写,但是这样写这边是失败的,失败的调用了之后就变成成功的了。
8. catch 调用了之后,如果里面没有抛出错误,返回的 promise 就是成功,所以在这边要抛出错误,select 一个 error,这样就可以了。来试一下,在这里去调 finally,完成了。
9. 现在是官方的 promise,先来试一下,肯定会执行的,虽然完成了,但是这个是报错的,这个是错误的,所以这边也报了一个错误,再补货一下就没关系了。返回的 promise 和这边是保持一致的,所以还可以调一个 catch,这样就没有错误了,catch 里面也打印出来了。
10. 试一下自己的 promise,跟上面是一样的,保持一致的。现在也可以这样,可以试一下 Rezo,现在 reject 是没有问题的,试一下 Rezo,Rezo 一个成功。
11. 这里也可以调用 catch,当然还可以接着去调用 deren,所以 catch 就删掉了,直接调点认,试一下,这样完成了,也成功了。
12. 在这里试一下跟官方的是不是一致的,行为上也是一致的,做了一个状态的穿透,这样 finally 和 catch 就已经完成啦。
后面就来写 promise 一些静态方法。
本节视频就到这里,下期见,bye-bye。
猜你喜欢
- 2024-10-27 前端面试大全:手写 Promise(前端手机端面试题)
- 2024-10-27 Javascript ES6中 Generator的?async/await Promise 了解一下?
- 2024-10-27 Promise 中 race 方法的目的是什么
- 2024-10-27 ES6 Promise对象(es6对象操作)
- 2024-10-27 ES6 Promise 的最佳实践(es6 promise作用)
- 2024-10-27 ES6学习(17):彻底搞懂 async 和 await,轻松掌握异步编程!
- 2024-10-27 自己造轮子,超详细、简单的Promise对象原理讲解及代码实现
- 2024-10-27 JavaScript ES6 语法特性介绍(javascript的基本语法遵循的标准是____。)
- 2024-10-27 图解 Promise 实现原理(一):基础实现
- 2024-10-27 可视化的 js:动态图演示 Promises & Async/Await 的过程
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)