- Objective:
- Breadcrumb:
# 概念阐释
## 语义
在处理异步函数时,如果不需要考虑先后顺序和依赖上下文的关系,可以使用处理**并发concurrent(同时进行)** 异步函数的`Promise.all()`
## 语法
```js
Promise.all([array]);
```
- 数组作为参数,需要处理的Promise对象名称;
- 结果返回单个承诺:
- 如果参数数组中的每个承诺都解决,从Promise.all()返回的单个承诺将解决,并包含参数数组中每个承诺的解决值的数组。
- 如果参数数组中的任何承诺被拒绝,从Promise.all()返回的单个承诺将立即以该承诺被拒绝的原因拒绝。
# 实例
```js
let myPromises = Promise.all([returnsPromOne(), returnsPromTwo(), returnsPromThree()]);
myPromises
.then((succussValue)=>{console.log(succussValue)})
.catch((rejectionReason)=>{console.log(rejectionReason)});
```
- 我们声明myPromises,并将其赋值为调用`Promise.all()`
- 包含三个promise的数组
- 使用一个成功处理程序来调用.then(),如果每个promise都成功解析,它将打印解析值的数组。
- 使用一个失败处理程序来调用.catch(),如果有任何promise被拒绝,它将打印第一个拒绝消息。
# 相关内容
# 问题
- [练习题](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-async-javascript-and-http-requests/modules/wdcp-22-learn-javascript-syntax-promises-4094827c-7a8d-4f11-ac0a-522d27c8e542/lessons/promises/exercises/promise-all)
```js
const checkAvailability = (itemName, distributorName) => {
console.log(`Checking availability of ${itemName} at ${distributorName}...`);//在异步操作之前执行
return new Promise((resolve, reject) => {
setTimeout(() => {
if (restockSuccess()) {
console.log(`${itemName} are in stock at ${distributorName}`)
resolve(itemName);
} else {
reject(`Error: ${itemName} is unavailable from ${distributorName} at this time.`);
}
}, 1000);
});
};
// This is a function that returns true 80% of the time
// We're using it to simulate a request to the distributor being successful this often
function restockSuccess() {
return (Math.random() > .2);
}
const onFulfill = (itemsArray) => {
console.log(`Items checked: ${itemsArray}`);
console.log(`Every item was available from the distributor. Placing order now.`);
};
const onReject = (rejectionReason) => {
console.log(rejectionReason);
};
```
- 写3个变量,分别检查sunglasses、pants和bags的库存,回调`checkAvailability(itemName, distributorName)`
- 用`Promise.all()`并发处理`checkAvailability`中异步部分
- 如果resolve,then...
- 如果reject,then...
# 问题答案
```js
const checkSunglasses = checkAvailability('sunglasses','Favorite Supply Co.');
const checkPants = checkAvailability('pants','Favorite Supply Co.');
const checkBags = checkAvailability('bags','Favorite Supply Co.');
Promise.all([checkSunglasses,checkPants,checkBags])
.then(onFulfill)
.catch(onReject);
```


# 参考资料