2021-03-21
阅读:36
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例,同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
例如:创建两个都会返回成功的Promise,调用Promise.all方法,会在所有结果都返回成功之后返回结果数组,并且,结果数组的顺序与all方法传入的顺序相同
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1');
},2000);
});
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p2');
},1000);
});
Promise.all([p1,p2]).then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);
})
如果有两个Promise,一个返回成功,一个返回失败,调用Promise.all方法会返回什么结果呢?
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1');
},2000);
});
//p2返回失败
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
reject('error-p2');
},0);
});
Promise.all([p1,p2]).then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);// error-p2
})
如上代码,Promise.all方法返回的新Promise实例会进入catch回调,并且返回最先被reject失败状态的值 error-p2
Promise.all在处理多个异步方法返回结果时比较方便 实际使用场景也很多,例如,页面加载依赖于多个ajax请求返回结果
Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例 Promise.race()方法会返回最先获取结果的promise,不管返回的是成功的结果还是失败的结果
例如:
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1');
},2000);
});
//p2返回失败
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
reject('error-p2');
},0);
});
Promise.race([p1,p2]).then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);// error-p2
})
上面代码我们创建了两个Promise对象 p1、p2调用Promise.race方法后,Promise.race返回的新Promise对象会进入失败状态,并返回p2的失败结果,因为p2比p1先拿到结果
实际使用场景中除了可以测试多个接口请求速度之外,还没想到其他的使用场景