概念
Promise 是一种异步编程的解决方案
Promise 相关知识点
- Promise对象是一个构造函数,用来生成Promise实例。可以直接用 new 一元运算符来运行,并申明一个变量( 假如是 P )来储存promise返回出来的对象(P 也称之为 promise 对象)
- 构造函数接收一个回调函数,这个回调函数接收2个参数,一个 resolve(成功), 一个 reject(失败) ;
- 回调函数中,可以写一些异步操作,比如setTimeout 或者 ajax 请求之类的
- promise 执行之后返回的 promise 对象 P 下 有一个 .then 的方法,用来注册我们成功状态下要完成的函数,或者是失败状态下要完成的函数
- .then 接收两个参数,都是函数;第一个函数是调用resolve之后会执行的函数, 第二个函数是调用 reject 之后会执行的函数
- resolve 中 可以接收 简单类型的值, 也可以接收 promise 对象, 或者是 thenable 对象
- 当给 resolve 传入一个promise 对象的时候, 只有等到 promise 对象转成 成功 或者 失败,resolve 才会成功当给 resolve 传入一个promise 对象的时候, 只有等到 promise 对象转成 成功 或者 失败,resolve 才会成功
- .then 中成功或者是失败执行的函数的返回值
返回一个简单类型的的返回值,作为then方法返回的 promise 对象的成功状态的值
返回一个 thenable 对象的时候, 只是成功状态才能执行下一个 .then
promise 的三种状态
pengding : 正在进行,暂时还不知道是否会成功或者失败
fulfilled : 已经完成,异步操作完成之后,如果调用的是 resolve 则执行的是成功的事情
rejected : 已经失败,异步操作完成之后,如果调用的是reject 则执行的是失败的事情
promise 的特点
① 对象的状态不受外界影响: promise 有三种状态,决定当前是哪一种状态取决于异步操作的结果,其他任何操作都无法改变这个状态
② 状态一旦改变,就不会再变: Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected,不会有其他的改变情况
③ 不可取消: promise 一旦新建它就会立即执行,无法中途取消
④ 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部
⑤当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)
promise 的 链式操作
如果我们需要多次调用 .then 方法, 可以写多次 P.then ( ); P.then ( ); P.then ( );
也可以直接用链式操作: P.then( ).then( ).then( );
thenthenable
概念: 在一个对象,或者函数中 有.then 函数
{
then( ){ }
}