- 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); ``` ![](http://image.harryrou.wiki/2023-09-05-CleanShot%202023-09-05%20at%2010.19.11%402x.png) ![](http://image.harryrou.wiki/2023-09-05-CleanShot%202023-09-05%20at%2010.33.21%402x.png) # 参考资料