初步了解promise

228 阅读3分钟

Promise 的状态

实例对象中的一个属性 [PromiState]

  • pending 未决定的

  • resolved/fullfilled 成功

  • rejected 失败

\

Promise 对象的值

实例对象中的一个属性[PromiseResult]

保存对象[成功/失败]的结果

只有能修改

  • reject

  • resolve


\

Promise 工作流程

note.youdao.com/s/LXpowyRi

\

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就不会在执行下去