关于Promise.all
Posted 圈地自萌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Promise.all相关的知识,希望对你有一定的参考价值。
Promise.all() 方法接收单个可迭代对象(如数组)作为参数,并返回一个promise。每个Promise都用一个数值进行了决议,对Promise.all() 的调用创建了新的 Promise p4。这些值的存储顺序保持了待决议(resolve)的Promise顺序,与完成的先后顺序无关,因此可以将结果匹配到每个Promise。如果任意Promise被拒绝,则p4会立即拒绝,不必等其他 Promise结束。
/* eslint-disable prefer-promise-reject-errors,eol-last */ let p1 = new Promise((resolve, reject) => resolve(42)) let p2 = new Promise((resolve, reject) => reject(43)) let p3 = new Promise((resolve, reject) => resolve(44)) let p4 = Promise.all([p1, p2, p3]) let p5 = Promise.all([p1, p3]) p1.then(v=>console.log(‘p1 then: ‘ + v)) // p1 then: 42 p4.then(v=>console.log(‘p4 then: ‘ + v)) // 不执行 p4.catch(v=>console.log(‘catch: ‘ + v)) // catch: 43 p2被拒绝,p4的拒绝处理函数立即调用,不会等p1和p3结束执行。但p1和p2仍然会执行。 p5.then(v=>{ console.log(Array.isArray(v)) // true console.log(v) // [ 42, 44 ] })
以上是关于关于Promise.all的主要内容,如果未能解决你的问题,请参考以下文章
深入理解Promise并写一个符合Promise a+规范的Promise代码
在嵌套 forEach 中的 Promise.all 之前评估 Promise,导致 Promise.all 为空
React Native 为啥我的代码在完成任务之前执行? Promise.all().then() 异步问题