当前位置: 首页 > Web前端 > HTML

Promise链调用特性

时间:2023-03-28 20:05:01 HTML

MDN-Promise.prototype.then()MDN-Promise.prototype.finally()当一个Promise完成(fulfilled)或失败(rejected)时,会异步调用返回函数(由当前线程循环来安排完成)。具体返回值按照以下规则返回。如果then:中的回调函数返回了一个值,那么then返回的Promise就会变成接受状态,返回值会作为接受状态的回调函数的参数值。如果没有返回值,那么then返回的Promise就会变成接受状态,接受状态的回调函数的参数值是undefined。抛出一个错误,那么then返回的Promise就会变成rejected,抛出的error会作为rejected状态的回调函数的参数值。返回一个已经处于accepted状态的Promise,那么then返回的Promise也将变为accepted,并将该Promise的accepted状态的回调函数的参数值作为该Promise的回调函数的参数值返回的Promise的接受状态。返回一个已经处于rejected状态的Promise,那么then返回的Promise也会变成rejected,那个Promise的rejected状态回调函数的参数值会作为rejected状态回调函数的参数值返回的承诺。返回一个未定状态(pending)的Promise,那么此时返回的Promise的状态也是未定的,它的最终状态与那个Promise的最终状态相同;同时,变为final状态时调用的回调函数参数与那个Promise变量final状态下回调函数的参数相同。varp1=function(){returnnewPromise((rs,rj)=>{setTimeout(()=>{rs('p1')},1000)})}varp2=function(){returnnewPromise((rs,rj)=>{setTimeout(()=>{rs('p2')},500)})}varpp=function(){returnp1().then(resP1=>{console.log('pp>p1>then')returnp2().then(resP2=>{console.log('pp>p2>then')returnresP2}).finally(()=>{console.log('pp>p2>finally')})}).finally(()=>{console.log('pp>p1>finally')})}pp().then(resPP=>{console.log('pp()>then')console.log(resPP)})//log://pp>p1>then//pp>p2>then//pp>p2>finally//pp>p1>finally//pp()>然后//p2