Promise对象

109 阅读2分钟
  • Promise对象的then方法会返回一个全新的Promise对象
  • 后面的then 方法就是在为上一个then返回的promise注册回调
  • 前面then方法中回调函数的返回值会作为后面then方法回调的参数
  • 如果回调中返回的是Promise,那后面的then方法的回调会等待他的结果

1. Promise就是一个类,在执行这个类的时候,需要传递一个执行器进去,执行器会立即执行

2\. Promise有3种状态
  1. 等待 pending
  2. 成功 fulfilled
  3. 失败 rejected
  • pending -> fulfilled
  • pending ->rejected
  • 一旦状态确定就不能更改
3\. resolve和reject函数就是用来更改状态的
  • resolve:fulfilled
  • reject:rejected
4\. then内部做的事情就是判断状态,如果状态是成功,调用成功的回调函数,如果状态是失败,调用失败的回调函数
_then方法是被定义在原型对象中的_
5\. then成功回调有一个参数,表示成功之后的值,then失败回调有一个参数,表示失败后的原因
`const promise=Promise.resolve(value)` 返回一个新的promise对象
等价于:
const promise=new Promise((resolve,reject)=>{ reslove(value)})
then()必须可以接收两个函数作为参数

then()返回的必须是一个promise实例(若无返回,默认为本身promise实例)

Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log)   //1
**在promise的then或catch方法中,接收的是一个函数,函数的参数是resolve或reject函数的返回值,如果传入的值是非函数,那么就会产生值的穿透现象**
**值穿透现象,简单理解就是传递的值会被直接忽略掉,继续执行链调用后续的方法**
**catch方法可以捕获之前从then方法中抛出的Error,而then方法中的第二个方法捕获不到第一个处理成功的方法中抛出的Error**
**Promise的then或catch里不能返回promise本身,否则会出现死循环**