微信搜索【GreatMovetotheWorld】,第一时间与大家分享前端行业动态、学习路径等。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。Promise.allSettled()方法在所有给定的承诺已被履行或拒绝后返回一个承诺,其中包含一个对象数组,每个对象代表相应的承诺结果。接下来,让我们看看Promise.allSettled()是如何工作的。1.Promise.allSettled()Promise.allSettled()可用于并行执行独立的异步操作并收集这些操作的结果。这个函数接受一组承诺(通常是一个可迭代对象)作为参数:conststatusesPromise=Promise.allSettled(promises);当所有输入承诺都被履行或拒绝时,statusesPromise解析为一个数组,其状态为{status:'fulfilled',value:value}—如果相应的承诺已被履行或{status:'rejected',reason:reason}如果相应的promise已被拒绝在解决所有promise之后,您可以使用then语法来提取它们的状态:statusesPromise.then(statuses=>{statuses;//[{status:'...',value:'...'},...]});或者使用异步/等待语法:conststatuses=awaitstatusesPromise;statuses;//[{status:'...',value:'...'},...]2.获取水果和蔬菜在深入研究Promise.allSettle()之前,我们首先定义两个简单的辅助函数。首先,resolveTimeout(value,delay)返回一个使用value来实现functionresolveTimeout(value,delay){returnnewPromise(resolve=>setTimeout(()=>resolve(value),delay));}其次,rejectTimeout(reason,delay)-在延迟时间结束后返回拒绝reason的承诺。最后,我们使用这些辅助函数对promise.allsettle()进行实验。2.1兑现所有承诺我们同时去当地杂货店购买蔬菜和水果。访问每个列表是一个异步操作:conststatusesPromise=Promise.allSettled([resolveTimeout(['potatoes','tomatoes'],1000),resolveTimeout(['oranges','apples'],1000)]);//wait...conststatuses=awaitstatusesPromise;//1秒后console.log(statuses);//[//{status:'fulfilled',value:['potatoes','tomatoes']},//{status:'fulfilled',value:['oranges','apples']}//]在线示例:https://codesandbox.io/s/all-...Promise.allSettled([...])返回一个在1秒内解析的承诺statusesPromise,就在蔬菜和水果解析之后,并行。statusesPromise解析为包含状态的数组。数组的第一项是蔬菜的完成状态:status:'fulfilled',value:['potatoes','tomatoes']}同理,第二项是水果的完成状态:{status:'fulfilled',value:['oranges','apples']}2.2承诺被拒绝想象一下杂货店里没有水果。在这种情况下,我们拒绝水果的承诺。promise.allsettle()在这种情况下如何工作?conststatusesPromise=Promise.allSettled([resolveTimeout(['potatoes','tomatoes'],1000),rejectTimeout(newError('Outoffruits!'),1000)]);//wait...conststatuses=awaitstatusesPromise;//1秒后console.log(statuses);//[//{status:'fulfilled',value:['potatoes','tomatoes']},//{status:'rejected',reason:Error('Outoffruits')}//]在线示例:https://codesandbox.io/s/one-...Promise.allSettled([...])1秒后返回的promise解析为状态数组:数组的第一项,蔬菜promise解析successfully:{status:'fulfilled',value:['potatoes','tomatoes']}第二项,因为fruitpromise被rejected,所以是rejectedstatus:{status:'rejected',reason:Error('Outoffruits')}即使输入数组中的第二个承诺被拒绝,statusesPromise仍然会成功解析一个状态数组。2.3所有承诺都被拒绝如果杂货店的蔬菜和水果卖完了怎么办?在这种情况下,两个承诺都将被拒绝。conststatusesPromise=Promise.allSettled([rejectTimeout(newError('Outofvegetables!'),1000),rejectTimeout(newError('Outoffruits'),1000)]);//wait...conststatuses=awaitstatusesPromise;//1秒后console.log(statuses);//[//{status:'rejected',reason:Error('Outofvegetables!')},//{status:'rejected',reason:Error('Outoffruits')}//]在线示例:https://codesandbox.io/s/all-...在这种情况下,statusesPromise仍然成功解析为状态数组。但是,该数组包含被拒绝承诺的状态。3.总结Promise.allSettled(promises)可以并行运行promises并将状态(已完成或已拒绝)收集到聚合数组中。Promise.allSettled(...)在需要执行并行且独立的异步操作并收集所有结果时非常有效,即使某些异步操作可能会失败。~~完了,我是洗碗智,你们的点赞和观看就是对我洗碗智最大的认可。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://dmitripavlutin.com/pr...交流有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智者。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。
