什么是PromisePromise是一个对象,表示一个异步操作最终完成或失败及其结果值。简而言之,Promise是一个占位符,用于表示将在未来某个时间交付的值。Promises是处理异步操作的非常有用的对象。JavaScript提供了一个辅助函数Promise.all(promisesArrayOrIterable),它支持并行处理多个Promise,并将结果值放在聚合数组中。让我们一起学习Promise.all()是如何工作的。1.Promise.all()Promise.all()是一个内置的辅助函数,可以接受一组promise。函数返回的格式如下:constallPromise=Promise.all([promise1,promise2,...]);那么你可以使用then-able语法来提取Promise返回的值:`allPromise.then(values=>{values;//[valueOfPromise1,valueOfPromise2,...]}).catch(error=>{error;//任何第一个被拒绝的promise的rejectReason});`或者使用async/await语法:`try{constvalues=awaitallPromise;价值观;//[valueOfPromise1,valueOfPromise2,...]}catch(error){错误;//rejectReasonofanyfirstrejectedpromise}`最有用的是Promise可以通过Promise.all()得到解决或拒绝。如果所有的promise对象请求都成功,那么allPromise就是一个由Promise组成的数组。Promise返回的顺序与它们在数组堆栈中的放置顺序有关。但是如果最后一个promiserejects,allPromise也会进入reject状态,不会等待其他promise正确返回。同时执行异步操作示例为了演示Promise.all()的工作流程,我们选择使用2个辅助类,resolveTimeout(value,delay)和rejectTimeout(reason,delay)。`functionresolveTimeout(value,delay){returnnewPromise(resolve=>setTimeout(()=>resolve(value),delay));}functionrejectTimeout(reason,delay){返回新的Promise((r,reject)=>setTimeout(()=>reject(reason),delay));}`resolveTimeout(value,delay)返回一个Promise对象,并携带一个参数值。另外,rejectTimeout也会返回一个Promise对象,并携带拒绝的原因。作为一个模拟的例子,store同时提供蔬菜和水果的列表,通过异步操作访问每个列表:`constallPromise=Promise.all([resolveTimeout(['potatoes','tomatoes'],1000),resolveTimeout(['oranges','apples'],1000)]);//wait...constlists=awaitallPromise;//1秒后console.log(lists);//[['potatoes','tomatoes'],['oranges','apples']]`constallPromise=Promise.all([...])返回新的allPromise的promise对象。constlists=awaitallPromise语句声明等待1秒,直到所有promise对象都被推入allpromise数组。列表中的最终输出是:[['potatoes','tomatoes'],['oranges','apples']]。promises数组的顺序直接影响结果的顺序。蔬菜承诺是输入数组中的第一项,水果承诺是输入数组中的第二项。结果数组包含相同顺序的值-第一个蔬菜列表和第二个水果列表。3.示例:当Promise受阻时现在想象一下杂货店没有水果的情况。在这种情况下,让我们拒绝返回的水果并报错:newError('Outoffruits!'):`constallPromise=Promise.all([resolveTimeout(['potatoes','tomatoes'],1000),rejectTimeout(newError('Outoffruits'),1000)]);try{//wait...constlists=awaitallPromise;}catch(error){//1秒后console.log(error.message);//'Outoffruits!'}`在这种情况下,allPromise=Promise.all([...])返回一个promise,然而,当promise(fruits)返回错误时newError('Outoffruits!')所有承诺也将拒绝并出现相同的错误。即使实现了蔬菜的承诺,Promise.all()也不起作用。Promise.all([...])的行为是快速失败的。如果一个promise在队列中拒绝,则其他promise也会以相同的原因拒绝并返回。4.总结Promise.all([…])是一个有用的辅助函数,它允许您使用快速失败策略并行执行异步操作并将结果聚合到一个数组中。原文地址:https://dmitripavlutin.com/pr...
