zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Promise.all()方方详解

详解 all Promise
2023-09-27 14:25:56 时间
1.Promise.all()方方详解

Promise.all 只有所有的Promise成功 才能够算作成功 只要有一个失败了 就直接失败


它包含一个参数 这个参数是指包含多个Promise的数组


如果有一个失败 那么返回第一个失败的Promise对象作为结果


也就是说 如果有两个失败了 返回第一个失败的Promise对象作为失败的结果。


如果他们三个都是成功的 那么all方法的返回的结果 是他们三个Promise对象成功结果的组成的一个数组


2.都是成功
let p1 new Promise((resolve, reject) {

 resolve( ok1 )

let p2 new Promise((resolve, reject) {

 resolve( ok2 )

let p3 new Promise((resolve, reject) {

 resolve( ok3 )

const result Promise.all([p1, p2, p3]);

console.log(result)


1425695-20210417174916298-716693759.png


3.有一个Promise失败
let p1 new Promise((resolve, reject) {

 resolve( ok1 )

let p2 new Promise((resolve, reject) {

 reject( ok2 )

let p3 new Promise((resolve, reject) {

 resolve( ok3 )

const result Promise.all([p1, p2, p3]);

console.log(result)


1425695-20210417175018945-787581750.png

promise.all在实际场景上的运用


由于promise在所有的结果都是成功


才算做成功


我们可以利用他的这个特征


去做全部成功才可以去完成某一个逻辑操作的业务场景




async/await实现Promise.acll() Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且**只返回一个Promise实例**,并且**输入的所有 promise 的 resolve 回调的结果是一个数组**。
今日一题 - 请模拟实现一个Promise.all() 方法? Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 Promise.all()方法的参数可以不是数组,但必须具有 Iterator 接口(所以数组、Map、Set都可以),并且只返回一个Promise实例,输入的所有promise的resolve回调的结果会按传入的按顺序作为一个数组的其中一项返回。 当然也支持非promise对象的传入,会作为数组中的一项返回。