Open xuechunLee opened 1 year ago
两种方法的实现
static race(promises) {
return new Promise((resolve, reject) => {
for(let i = 0;i < promises.length;i++) {
Promise.resolve(promises[i]).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
}
})
}
static all(promises) {
let result = [];
let index = 0
return new Promise((resolve, reject) => {
for(let i = 0;i<promises.length;i++) {
Promise.resolve(promises[i]).then(res => {
result[i] = res;
index++
if(index === promises.length) {
resolve(result)
}
}).catch(err => {
reject(err)
})
}
})
}
Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。 适用场景:
比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。