//方式1
function retry(fn,times,delay){
return new Promise((resolve,reject)=>{
var attemp = function(){
fn().resolve(resolve).catch(err=>{
if(times==0){
reject(err)
}else{
times--;
setTimeOut(()=>{
attemp()
},delay)
}
})
}
})
}
//方式2
function retry(fn,times,delay){
return new Promise((resolve,reject)=>{
var attemp = function(){
fn().then(resolve(),err=>{
if(times==0){
reject(err)
}else{
times--;
setTimeOut(()=>{
attemp()
},delay)
}
})
}
})
}
console.log('script start')
let promise1 = new Promise(function (resolve) {
console.log('promise1')
resolve()
console.log('promise1 end')
}).then(function () {
console.log('promise2')
})
setTimeout(function(){
console.log('settimeout')
})
console.log('script end')
// 输出顺序: script start->promise1->promise1 end->script end->promise2->settimeout
Promise.prototype.finally=function(callback){
let Fn = this.constructor;
return this.then(
value=>Fn.resolve(callback()).then(()=>value),
reason=>Fn.resolve(callback()).then(()=>{throw reason})
)
}
全部执行完成再执行then函数,适用于多个请求调用返回结果后处理使用。
var p1 =new Promise(function(resolve,reject){
setTimeout(function(){
resolve(1);
},0)
});
var p2 = new Promise(function(resolve,reject){
setTimeout(function(){
resolve(2);
},200)
});
var p3 = new Promise(function(resolve,reject){
setTimeout(function(){
try{
console.log(XX.BBB);
}
catch(exp){
resolve("error");
}
},100)
});
Promise.all([p1, p2, p3]).then(function (results) {
console.log("success")
console.log(results);
}).catch(function(r){
console.log("err");
console.log(r);
});
Promise.prototype.race = function(){
}