一、Promise是什么?
Promise是JS中进行异步操作的新的解决方案(旧的计划是回调函数的模式,回调函数里嵌套函数)
从语法上来说,Promise是一个构造函数。
从性能上来说,用Promise的实例封装异步操作并获取后果。
二、为什么要用Promise?
在旧的回调函数的模式中,当后一个异步申请的参数依赖于前一个异步申请的后果时,就会呈现层层嵌套的状况,使得代码维护性变得比拟差,Promise能够很好的解决这个问题,then的链式调用使得Promise的构造档次很清晰,async和await能使代码的运行变成同步。
上面的图片里的伪代码能够进行一个简略演示。
三、Promise的根本流程
咱们应用Promise这个构造函数,创立它的实例对象,在入参中传入回调函数,回调函数中执行异步操作,并返回Promise的执行后果胜利(resolve)或失败(reject)或抛出异样,then办法中定义胜利(onResolved)及失败(onRejected)的函数,来对Promise的返回后果进行解决。要留神,promise.then也是一个promise。
根本语法如下:
new Promise((resolve, reject)=>{ // 执行异步操作,操作实现后将执行后果返回 resolve(1)}).then(value=>{ // 当返回为resolve时,执行胜利的处理结果 console.log('success', value)}, reason=>{ // 当返回为reject时,执行失败的处理结果 console.log('fail', reason)})
简略图示如下
四、Promise的重要概念
1、Promise三种状态,期待中 pending、胜利 resolved/fulfilled、失败 rejected,当Promise实例创立时,即为pending状态,如何扭转promise的状态
(1) resolve(value) ---- 如果以后是pending就会变为resolved
(2) reject(reason) ---- 如果以后是pending就会变为rejected
(3) 抛出异样 ---- 如果以后是pending就会变为rejected
2、Promise的状态不可逆,一旦由期待--->胜利,或者由期待--->失败,就不能再变更为其它的状态。
3、Promise通过.then来获取promise的执行后果,第一个参数传入胜利的处理函数,第二个参数传入失败的处理函数,失败还能够通过catch进行异样穿透,最初解决。
4、promise.then也是promise,所以then能力进行链式调用,then的返回后果取决于then办法里的执行后果
(1) then办法返回任意的非promise的值时,此时链式调用下一个then办法里执行的是胜利的函数,(包含没有返回值,此时返回的undefined)
(2) then办法里返回promise,then的返回后果由promise的执行后果决定,resolve即执行胜利的函数,reject即执行失败的函数
(3) then办法中间接抛出异样,即执行失败的的函数