思想:在promise的prototype上新增该方法
Promise.prototype.complete=function(callback){
let p=this.constructor;
return this.then(
value=>p.resolve(callback()).then(()=>value),
reson=>p.resolve(callback()).then(()=>{throw reson})
)
}
eg:
let p1=new Promise((resolve,reject)=>{
let radom=Math.random()*10;
setTimeout(()=>{
if(radom%2===0){
let suc='接口请求成功';
resolve(suc);
}else{
let err='接口请求失败';
reject(err);
}
},500)
})
p1.then((data)=>{
console.log(`${data}`);
}).catch((err)=>{
console.log(`${err}`)
}).complete(()=>{
console.log('无论成功或失败请求都已经完成');
})
打印输出结果为:
接口请求失败
无论成功或失败请求都已经完成
结果和预期效果一致。