promise的核心原理其实就是发布订阅模式,通过两个队列来缓存成功的回调(onResolve)和失败的回调(onReject),promise是异步编程的一种解决方案,解决多个异步方法串行的问题,比如回调地狱等问题
Promise是一个构造函数,自己身上有all、allsettled、any、race、reject、resolve这些静态方法,原型上有then、catch等方法,因此Promise new出来的对象肯定就有then、catch方法
同时发起多个请求可以使用promise.all
有三种可切换状态:pending(进行中)、resloved、rejected
promise状态只能从pending态转onfulfilled,onrejected到resolved、或者rejected
基本用法:
可以通过Promise的构造函数创建Promise对象
Promise构造函数接收一个函数作为参数,该函数的两个参数是resolve
,reject
,其中resolve
函数的作用是当Promise对象转移到成功,调用resolve并将操作结果作为其参数传递出去;reject
函数的作用是单Promise对象的状态变为失败时,将操作报出的错误作为其参数传递出去
reject方法
reject的作用就是把Promise的状态从pending置为rejected,这样在then中就能捕捉到reject的回调函数
then方法
可以使用链式调用,then方法可以接受两个参数,第一个对应resolve的回调,第二个对应reject(的回调。所以我们能够分别拿到他们传过来的数据
通常使用axios在发请求的时候使用.then方法,因为axios已经封装好了promise
catch 方法
和then的第二个参数一样,用来指定reject的回调--------即便是有错误的代码也不会报错,与try/catch语句有相同的功能
all
all方法提供了并行执行异步操作的能力,在all中所有异步操作结束后才执行回调,可以用来同时发多个请求,在写商品分类的时候就有用到promise.all
race
race则不同它等到第一个Promise改变状态就开始执行回调函数。将上面的all
改为race
,得到