Promise.all和Promise.race的区别和使用

简介: 比如当数组里的P1,P2都执行完成时,页面才显示。值得注意的是,返回的数组结果顺序不会改变,即使P2的返回要比P1的返回快,顺序依然是P1,P2Promise.all成功返回成功数组,失败返回失败数据,一但失败就不会继续往下走

Promise.all

比如当数组里的P1,P2都执行完成时,页面才显示。

值得注意的是,返回的数组结果顺序不会改变,即使P2的返回要比P1的返回快,顺序依然是P1,P2

Promise.all成功返回成功数组,

失败返回失败数据,一但失败就不会继续往下走

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
// let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.all([p1, p2, p4]).then(res => {
    console.log(res); // ['aaa', 'bbb', 'ddd']
}).catch(err => {
    console.log(err, "错误");
})

如果遇到错误的情况,那么将不会继续执行下去,直接返回catch方法

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.all([p1, p2,p3, p4]).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err); //ccc
})

Promise.race

Promise.race是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪个获取的快,就返回哪个结果,不管结果本身是成功还是失败

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.race([p1, p2, p3, p4]).then(res => {
    console.log(res, "成功"); //aaa 成功
}).catch(err => {
    console.log(err, "失败"); 
})

如果第一个请求失败就直接

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.race([p3, p2, p1, p4]).then(res => {
    console.log(res, "成功"); 
}).catch(err => {
    console.log(err, "失败"); //ccc 失败
})

它们两者的使用场景

Promise.all和Promise.race都是有使用场景的。

有些时候我们做一个操作可能得同时需要不同的接口返回的数据,这时我们就可以使用Promise.all;

有时我们比如说有好几个服务器的好几个接口都提供同样的服务,我们不知道哪个接口更快,就可以使用Promise.race,哪个接口的数据先回来我们就用哪个接口的数据。

相关文章
|
3月前
|
存储 前端开发 算法
promise.all是怎实现的?
promise.all是怎实现的?
22 0
|
7月前
|
前端开发
21 # 实现 promise 的 race 方法
21 # 实现 promise 的 race 方法
20 0
|
1月前
|
前端开发
promise和async的区别是什么?
promise和async的区别是什么?
10 1
|
8月前
|
前端开发 API
Promise.allSettled 的 Polyfill 处理
Promise.allSettled 的 Polyfill 处理
26 0
|
前端开发
前端学习案例23-promise.all和promise.race
前端学习案例23-promise.all和promise.race
52 0
前端学习案例23-promise.all和promise.race
|
前端开发
前端学习案例24-promise.all和promise.race之2
前端学习案例24-promise.all和promise.race之2
59 0
前端学习案例24-promise.all和promise.race之2
|
前端开发
Promise.all()方方详解
Promise.all()方方详解
Promise.all()方方详解
|
前端开发
前端学习案例1-promise之promise.all
前端学习案例1-promise之promise.all
52 0
前端学习案例1-promise之promise.all
|
前端开发 JavaScript
Promise.all等待所有Promise执行完成
Promise.all等待所有Promise执行完成
343 0
|
前端开发
Promise.all和promise.race的应用场景举例
Promise.all和promise.race的应用场景举例
159 0