如何使用并区分Promise.all和Promise.race?
Posted cxyqts
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用并区分Promise.all和Promise.race?相关的知识,希望对你有一定的参考价值。
1.Pomise.all的使用
Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
具体代码如下:
1 let p1 = new Promise((resolve, reject) => { 2 resolve(‘成功了‘) 3 }) 4 5 let p2 = new Promise((resolve, reject) => { 6 resolve(‘success‘) 7 }) 8 9 let p3 = Promse.reject(‘失败‘) 10 11 Promise.all([p1, p2]).then((result) => { 12 console.log(result) // 成功了 13 }).catch((error) => { 14 console.log(error) 15 }) 16 17 Promise.all([p1,p3,p2]).then((result) => { 18 console.log(result) 19 }).catch((error) => { 20 console.log(error) // 失败了 21 })
2.Promise.race的使用
Promse.race就是比较速度进行比较,就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态,应用场景比较少。
具体代码如下:
1 let p1 = new Promise((resolve, reject) => { 2 setTimeout(() => { 3 resolve(‘success‘) 4 },1000) 5 }) 6 7 let p2 = new Promise((resolve, reject) => { 8 setTimeout(() => { 9 reject(‘failed‘) 10 }, 500) 11 }) 12 13 Promise.race([p1, p2]).then((result) => { 14 console.log(result) 15 }).catch((error) => { 16 console.log(error) // ‘failed‘ 17 })
以上是关于如何使用并区分Promise.all和Promise.race?的主要内容,如果未能解决你的问题,请参考以下文章
Promise.all API 调用,区分哪个抛出错误,只拒绝一个
如何将 Promise.all() 限制为每秒 5 个 Promise?
如何在 Nuxt 的 asyncData 中对 Promise.all 进行数组解构