Promise 的状态
实例对象中的一个属性 [PromiState]
-
pending 未决定的
-
resolved/fullfilled 成功
-
rejected 失败
\
Promise 对象的值
实例对象中的一个属性[PromiseResult]
保存对象[成功/失败]的结果
只有能修改
-
reject
-
resolve
\
Promise 工作流程
\
Promise api
- Promise(excutor){}
1.executor函数:执行器((resolve,reject))=>{}
2.reslove函数:内部定义成功时候我们调用的函数value=>{}
3.reject函数:内部定义失败时我们调用的函数reason=>{}
说明:executor会在Promise内部立即同步调用,异步函数操作在执行器中执行
\
- Promise.prototype.then方法(onResolved,onRejected)=>{}
1.onResolved函数:成功的回调函数(value)=>{}
2.onRejected函数:失败的回调函数(reason)=>{}
说明:成功函数与失败函数回调都会返回一个新的promise对象
\
- Promise.prototype.catch 方法:(onRejected)=>{}
1.onRejected函数:失败的回调函数(reason)=>{}
说明: then()的语法糖, 相当于: then(undefined, onRejected)
\
- Promise.resolve方法:(value)=>{}
1.value:成功的数据或promise
说明:返回一个成功/失败的promise对象,将value这个值转化为promise对象(如果value为数字,promise的PromiseResult是value)
(1)如果传入的参数为非Promise类型的对象,则返回的结果为成功的promise对象
(2)如果传入的参数为Promise对象,则参数的结果决定了resolve的结果,值就是参数的PromiseResult
\
- Promise.reject方法:(reason)=>{}
1.reason失败的原因
说明:返回一个失败的promise对象
(1)如果传入的参数为非Promise类型的对象,则返回的结果为失败的promise对象,值为value
(2)如果传入的参数为Promise对象,状态永远是失败的,结果就是传入的对象
\
- Promise.all方法:(promises)=>{}
(1)promises:包含n个promise的数组
说明:返回一个新的promise,只有所有的promise都成功才成功,只要有一个失败就直接失败
\
- Promise.race方法:(promises)=>{}
(1)promises:包含n个promise的数组
说明:返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态
\
Promise常见问题
\
- Promise状态改变
(1)resolve pending->resolved/fulfilled
(2)reject pending->rejected
(3)throw pending->reject
\
- 一个promise指定多个成功/失败的函数
说明.then再.then当promise改变为对应状态都会调用
\
- 改变状态与指定回调的执行顺序
(1)如果是同步先搞定状态再执行回调,如果是异步先执行回调再改变状态
(2)如何先改变再指定回调?
1.在执行器中直接调用resolve()/reject()
2.延迟更长时间才调用then()
(3)什么时候才能得到数据?
1
- then 返回对象(p.then永远都是Promise对象)
1.抛出错误(thorw'value') 对象状态是rejected,PromiseResult是value
// throw '出错误了'
2.返回结果不是Promise对象 对象状态是resolved,PromiseResult是521
// return 521;
3.返回结果是Promise的对象(就是代替)
return new Promise((resolve,reject)=>{
// resolve('dd')
return reject('pp')
\
- promise如何串联多个操作任务?
(1)promise的then()返回一个新的promise,可以开启then()的链式调用
(2)通过then的链式调用串联多个同步/异步任务
\
- 异常穿透?
(1)许多.then之后.catch只要是失败状态都能捕获到
\
- then中断链式调用?
(1)return new Promise(()=>{})//返回一个空的Promise对象,状态会变成pending,then就不会在执行下去