Promise 学习

回调地狱的缺点

  • 代码耦合性太强,牵一发而动全身,难以维护。

  • 大量冗余代码相互嵌套,代码的可读性和可复用性变差。

如何解决回调地狱问题

为了解决回调地狱的问题,ES6中新增了 Promise的概念。

Promise 的概念


  1. Promise 是一个构造函数。

我们可以创建Promise的实例 const p = new Promise()

new出来的Promise实例对象,代表一个异步操作。

  1. Promise.prototype 上包含一个 .then() 方法。

每一次new Promise() 构造函数得到的实例对象,都可以通过原型链的方式访问到 .then() 方法,例如 p.then()

  1. .then() 方法用来预先指定成功和失败的回调函数。

p.then(成功的回调函数,失败的回调函数)

p.then(result => {} , error => {} )

调用 .then() 的时候,成功的回调函数是必须填写的,但是失败的回调函数是可以选择的。

基于Promise按顺序读取文件内容


就是说要去请求三个文件,依次是文件一、文件二、文件三。但是不能保证文件的获取顺序,如果一次嵌套执行,就造成了回调地狱,所以呢,那么promise就派上用场了。

.then() 方法的特性

如果上一个 .then() 方法中返回了一个新的Promise实例对象,则可以通过下一个 .then() 继续进行处理,通过 .then() 方法的链式调用,就解决了回调地域的问题。

Promise支持链式调用,从而解决回调地狱的问题:

说明:本文中 thenFs 是一个读取文件插件,返回的是一个 Promise 实例

在这里插入图片描述

通过 .catch 捕获错误


在 Promise 的链式操作中如果发生错误,可以使用 Promise.prototype.catch 方法进行捕获和处理:

在这里插入图片描述

当遇到错误,后面的 .then() 都不会在执行了,直接执行 .catch()方法中的内容。

如果我们不希望前面的错误导致后面的 .then() 无法正常工作,则可以将 .catch() 的调用提前,就像下面一样:

在这里插入图片描述

Promise.all()


Promise.all() 方法会发起并行的 Promise 异步操作,等所有的异步操作全部结束之后才会执行下一步的 .then() 操作(等待机制)。示例代码:

在这里插入图片描述

Promise.race()


Promise.race() 方法会发起并行的 Promise 异步操作,只要任何一个异步操作完成,就会立即执行下一步的 .then() 操作(赛跑机制)。示例代码如下:

在这里插入图片描述

先执行完之后,后边的都没了就,只有一个。

Promise 调用 resolve 和 reject 回调函数


最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值