<script>
let p1=new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('3秒后出现的成功');
}, 3000);
})
let p2=new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('1秒后出现的成功');
}, 1000);
})
let p3=new Promise((resolve,reject)=>{
reject('失败3')
}).catch((err)=>{console.log(err);})
let p4=new Promise((resolve,reject)=>{
reject('失败4')
})
// 1.promise.all会合并多个promise实例,形成一个新的的promise实例,promise.all的状态是由其他promise实例的状态来决定的
// 2.如果promise实例都是成功状态,那么promise.all的状态也是成功的,并且会接收promise实例返回值形成的数组
// 3.返回的结果是由书写顺序决定,不是由加载状态决定的
Promise.all([p1,p2]).then((res)=>{
console.log(res);// 虽然p1比p2完成的慢,但是返回的结果却是 ["3秒后出现的成功", "1秒后出现的成功"]
}).catch((err)=>{
console.log(err);
})
// 4.如果promise实例有失败状态,那么promise.all的状态也是失败的,并且接收第一个失败状态的promise实例的返回值
// 但是如果promise实例自己有catch进行处理,就不会进入到promise.all中
Promise.all([p1,p2,p3,p4]).then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);//失败4
})
// 5.使用场景:根据多个请求合并后的结果来进行后续的操作
// 返回结果的顺序是由书写顺序决定的,在一些特定环境下,操作很友好
</script>