1. Promise.allSettled
接受一个Promise数组,返回结果也是一个promise对象。
allSettled()方法接受的参数是一个数组,数组里每个元素都是一个promise对象。它返回的结果状态永远是成功,结果值是每一个promise对象返回的状态和值。
代码:
function promiseClick1(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 2; //生成1-10的随机数
console.log('2s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('2s数字太于10了即将执行失败回调');
}
}, 2000);
})
return p
}
function promiseClick2(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num =3; //生成1-10的随机数
console.log('3s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('3s数字太于10了即将执行失败回调');
}
}, 3000);
})
return p
}
function promiseClick3(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 4; //生成1-10的随机数
console.log('4s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('4s数字太于10了即将执行失败回调');
}
}, 4000);
})
return p
}
Promise.allSettled([promiseClick3(), promiseClick2(), promiseClick1()])
.then(function(results){
console.log('成功',results);
});
执行结果:
注:在index.js文件中使用然后执行该文件,node的版本需在12.x.x以上
若node的版本在12.xx.xx以下会遇到这种错误
2. Promise.all
如果所有promise对象返回的结果都是成功,all()方法返回的状态才是成功,返回的值是每个promise对象返回的值。如果有一个失败,all()返回的结果就是失败,返回的值是失败的promise对象返回的值。
成功:
function promiseClick1(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 2; //生成1-10的随机数
console.log('2s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('2s数字太于10了即将执行失败回调');
}
}, 2000);
})
return p
}
function promiseClick2(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num =3; //生成1-10的随机数
console.log('3s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('3s数字太于10了即将执行失败回调');
}
}, 3000);
})
return p
}
function promiseClick3(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 4; //生成1-10的随机数
console.log('4s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('4s数字太于10了即将执行失败回调');
}
}, 4000);
})
return p
}
Promise.all([promiseClick3(), promiseClick2(), promiseClick1()])
.then(function(results){
console.log('成功',results);
})
.catch((erro) => {
console.log(erro);
});
失败案例:
function promiseClick1(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 20; //生成1-10的随机数
console.log('2s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('2s数字太于10了即将执行失败回调');
}
}, 2000);
})
return p
}
function promiseClick2(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num =3; //生成1-10的随机数
console.log('3s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('3s数字太于10了即将执行失败回调');
}
}, 3000);
})
return p
}
function promiseClick3(){
let p = new Promise(function(resolve, reject){
setTimeout(function(){
var num = 4; //生成1-10的随机数
console.log('4s随机数生成的值:',num)
if(num<=10){
resolve(num);
}
else{
reject('4s数字太于10了即将执行失败回调');
}
}, 4000);
})
return p
}
Promise.all([promiseClick3(), promiseClick2(), promiseClick1()])
.then(function(results){
console.log('成功',results);
})
.catch((erro) => {
console.log(erro);
});
总结:
Promise.allSettled()和Promise.all()用来做批量异步处理。如果说每一个异步都需要得到结果,就用allSettled()。如果说每一个异步都需要成功,才能往下进行,就用all ()。
Promise.allSettled和Promise.all是ES11新特性。