Promise学习
1. 理解
1)Promise 是一门新技术(ES6规范)
2)Promise是JS中进行异步编程的新解决方案
2. 具体表达
1)从语法上说:Promise是一个构造函数,
2)从功能上说:Promise对象用来封装一个异步操作并可以获取其成功/失败的结果值
支持链式调用,解决回调地狱问题,回调函数中多次嵌套。
3. Promise的状态改变。PromiseState 是内置属性
1)pending变为resolve / fullfilled
2)pending变为reject
只有两种状态改变,且promise对象只能改变一次,无论变为成功和失败都会有一个结果数据。(试验过程中是一个值)
4. Promise 对象的值
保存异步任务成功或失败的结果,可以由resolve和reject函数进行
Promise中传入的参数 (resolve, reject) 称为executor执行器,执行器会在Promise内部立即同步调用,异步操作在执行器中执行。
catch可以指定失败时候的回调。catch内部也是then方法实现的。
常用方法Promise.resolve() 如果传入一个非Promise对象,则状态为resolve,并且result为传入的值,如果为Promise对象,则状态值为Promise的对象 Promise.reject() 传入非Promise,以及结果 状态都是reject,
失败结果可以是传入的成功Promise对象。
Promise.all方法() => {} 传入n个promise的数组,返回一个新的promise,只有所有的promise都成功才成功,只要有一个失败了就直接失败。
如果所有promise成功,返回结果为成功,且结果为所有数组成功的结果数组,如果失败,为失败这个promise的结果。
Promise.race方法,传入n个promise的数组,返回一个新的promise。第一个完成的promise的结果状态就是最终的结果状态
throw 抛出错误可以改变promise对象的状态。 Promise中不管先声明then方法还是 先 改变promise的状态,都是等状态改变之后,再执行then的回调函数。promise不管同步异步都是支持的。
调用then方法,如果抛出错误,则执行then方法返回的promise 为reject, 如果 返回非promise对象,返回结果是fulfill即resolve(),如果返回promise对象,根据promise对象来决定。
5. 中断Promise的执行链,可以返回一个pandding状态的执行链才行。