面试知识点总结 - ES6 异步处理方案 promise

这篇博客详细总结了JavaScript中的ES6异步处理方案Promise。Promise作为一个异步事件的容器,拥有三种状态,不可逆且受异步操作影响。它通过resolve和reject来传递异步操作的结果,并通过then和catch进行结果处理。工作流程中,当异步成功或失败时,Promise的状态会相应改变,并调用相应的回调函数。此外,文章还介绍了then、catch、all、race和finally等Promise的方法及其用法。
摘要由CSDN通过智能技术生成

异步

  1. 异步任务:定时器、DOM事件、ajax请求、图片视频等资源的加载
  2. 异步解决方案:事件回调函数、promise

1. 概念

  1. promise是一个异步事件的容器,一旦新建立即执行,中途无法中断
  2. 有三种状态(进行中pending、成功fulfilled/resolved、失败rejected)
  3. 状态不收外界影响,只有异步操作的结果可以影响
  4. 状态一旦改变就会一直保持不变,任何时候都可以得到该结果,不像事件,只有发生时可以监听到,否则会错过
  5. 是一个构造函数,接收一个函数为参数,该函数有两个参数,分别为resolve、reject,均为函数
  6. resolve函数作用:当异步操作成功时调用,将状态为成功,并传递异步执行结果
  7. reject函数作用:当异步操作失败时调用,将状态为失败,并传递异步错误信息
  8. resolve和reject在本轮事件循环的末尾执行,一般放在函数最后,return resolve(res),因为return后面的代码不会执行
  9. promise的作用:把回调函数拆出去,通过状态判断异步执行结果,通过resolve和reject传递执行结果,通过then、catch等方法处理返回的结果

2. 工作流程

  1. promise是一个保存异步操作的容器
  2. 新建一个promise后,会立即执行
  3. 当异步操作成功时,调用resolve方法,将状态由进行中变为成功,并把异步成功后返回的结果作为参数传给then方法的第一个回调函数
  4. 当异步操作失败时,调用reject方法,将状态由进行中变为失败,并把异步失败时抛出的错误作为参数传给catch方法的回调函数,或者传给then方法的第二个回调函数
  5. 一般都是用catch方法,不写then的第二个回调函数参数

3. 方法

  1. then:Promise.prototype.then,为promise添加状态改变时的回调函数,一般是添加成功时的
  1. then方法返回一个新的promise对象,所以可以链式调用
  2. 链式的then方法,可以指定一组按照次序调用的回调函数
  3. 链式then中,第一个函数调用完,会将返回结果作为参数传递给第二个回调函数
  4. then方法会在当前脚本文件(如.js文件)的所有同步任务执行完成后才执行
  5. 接收两个函数为参数,第一个在promise状态为成功时调用,第二个在promise状态为失败时调用,这两个函数都接收resolve和reject传递过来的参数(异步返回的结果)
  1. catch:Promise.prototype.catch,为promise添加发生错误时的回调函数
  1. catch方法返回一个新的promise对象,所以可以链式调用
  2. 捕获的错误包括:异步的错误、then方法中指定的回调函数的错误
  3. resolve后面的错误不会被捕获,因为promise状态一旦改变就保持不变了
  4. 错误会一致向后传递,指导被捕获为止
  5. 如果没有错误,则跳过catch
  6. 接收一个函数为参数,接收reject传递过来的参数(报错)
  1. all:Promise.all,将多个promise实例包装成一个promise实例
  1. 接收一个promise实例的数组
  2. 当数组中的每一个promise都返回成功时,新promise实例的状态才是成功,返回结果为所有实例返回加过组成的数组
  3. 数组中的每个promise实例,只要有一个返回失败,新promise实例的状态就为失败,返回结果为第一个失败的promise实例的返回值
  1. race:Promise.race,和all类似
  1. 只要有一个promise实例状态先改变,新promise实例的状态就跟着改变,返回结果就是这个最先改变的promise实例的返回值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值