Promise.allrace和any方法都是什么意思?漫思

先一句话描述下Promise.all()、Promise.race()和Promise.any()的区别。

一例胜千言,通过实例能更好地表示上面3种方法的区别。

无论是上传图片还是下载图片,都是异步操作,此时,我们可以将这两个常见交互变成了一个Promise操作,为了简化理解,整个异步过程我们就使用定时器代替,示意如下:

constupload=function(blob){lettime=Math.round(100+500*Math.random());returnnewPromise((resolve,reject)=>{//是否执行测试console.log(`run${time}ms`);//成功失败概率50%if(Math.random()>0.5){setTimeout(resolve,time,'promiseresolved'+time+'ms');}else{setTimeout(reject,time,'promiserejected'+time+'ms');}});};constload=function(url){//同upload};1.Promise.all()Promise.all()里面所有可迭代的Promise都通过则认为是成功,如果有一个拒绝,则认为失败。

测试如下:

(async()=>{try{letresult=awaitPromise.all([upload(0),upload(1),upload(2)]);console.log(result);}catch(err){console.error(err);}})();只有3个upload方法都resolve通过才会认为成功,否则返回第一个出错的提示结构,如下截图所示:

在本例中,Promise.all()成功的概率是0.5*0.5*0.5=0.125,也就是成功率是12.5%。

Promise.race()顾名思意就是“赛跑”,哪个执行快就使用哪个。

(async()=>{try{letresult=awaitPromise.race([load(0),load(1),load(2)]);console.log(result);}catch(err){console.error(err);}})();执行结果如下截图:

并且,成功的返回值不再是一个数组,而是单个提示。

在本例中,Promise.race()成功的概率是0.5,也就是成功率是50%。

Promise.any()更关心成功,只要有一个成功就可以了,除非所有的Promise都拒绝,否则就认为成功。

类似的测试代码:

(async()=>{try{letresult=awaitPromise.any([load(0),load(1),load(2)]);console.log(result);}catch(err){console.error(err);}})();执行结果如下截图:

可以看到出错的类型和上面两个方法都不一样,是AggregateError类型的错误。

AggregateError:Allpromiseswererejected

成功的返回值是第一个执行成功的Promise的返回值。

在本例中,Promise.any()成功的概率是(1–0.5*0.5*0.5)=87.5%,也就是成功率是87.5%。

这一小节讲下三种Promise方法合适的使用场景。

单纯举例,让大家更好地了解这3种Promise方法。

Promise.all()在图片批量上传的时候很有用,可以知道什么时候这批图片全部上传完毕,保证了并行,同时知道最终的上传结果。

上面的loading策略仔细一想,有些怪怪的,请求本来很快,还非要显示一个loading,这不是舍本逐末了吗?

所以需求应该是这样,如果请求可以在200ms内完成,则不显示loading,如果要超过200ms,则至少显示200ms的loading。

这个需求可以考虑使用Promise.race()方法,执行代码示意如下(getUserInfo、showUserInfo等方法都不变)。

执行结果如下截图示意:

可取消的Promise

找到一个Promise.race()方法的案例,出自MichaelClark,代码如下:

下面代码出自ChrisJensen,可以保持并行请求的数量固定。

代码如下:

Promise.any()适合用在通过不同路径请求同一个资源的需求上。

例如,Vue3.0在unpkg和jsdelivr都有在线的CDN资源,都是国外的CDN,国内直接调用不确定哪个站点会抽风,加载慢,这时候可以两个资源都请求,哪个请求先成功就使用哪一个。

我们就可以使用下面代码进行请求(使用动态import示意):

不过没关系,有了Promise.any(),就可以使用最快的那一个。

Promise.any()还有一个好处,那就是如果unpkg这个网站挂了,也不会影响Vue资源的加载,因为一个请求失败了,会继续请求其他的资源,也就是会去请求jsdelivr的资源。

这样保证了资源尽可能可用,但是尽可能使用加载最快的资源。

在这种场景下就很实用。

Promise.any()是后出来的规范,因此,兼容性相对滞后一些,如下图所示:

Safari14才支持,因此,目前生产环境还不能使用,毕竟我们厂子还有些产品需要兼容iOS9呢。

THE END
1.感叹号的图标什么意思感叹号的图标什么意思查看全部4条评论回答 写回答 hugo949099 感叹号的图标通常表示警告、提醒或重要提示。它是一种用于向用户传达特定信息的符号。当你在使用电脑、手机或其他设备时,可能会经常看到这个图标。在电脑操作系统中,感叹号图标通常出现在错误消息或警告框中,以指示发生了某种问题。它可以提醒用户注意,并https://wap.zol.com.cn/ask/details_17424084_3033373_3.html
2.汽车仪表盘图标大全,汽车仪表盘指示灯是什么意思现在的汽车功能非常多,所以汽车仪表盘图标也是超多,突然亮起一个指示灯图标,你也未必知道它是什么意思,然后急着去翻车辆用户手册?以下是有驾汇总的汽车仪表盘图标大全,赶快收藏起来以备不时之需吧: 1、红色图标 2、黄色图标 3、绿色图标 汽车仪表盘分为转速表、里程表以及油表,在整个仪表盘中,会有可能随时亮起https://www.yoojia.com/ask/3-8896308190485879993.html
3.微信图标右下角蓝色√什么意思右下角蓝色√怎么去掉设置华为手机其他手机上的微信图标略有不一样,细心的朋友会发现华为手机微信右下角会有一个蓝色的√,那么这个勾勾代表什么意思呢?有什么用呢?是否可以取消呢?来看看吧! 微信图标右下角蓝色√什么意思? 华为手机微信右下方的蓝色对勾图标,其实是华为的支付保护功能。在牵扯到支付安全的应用下方的会显示。可以在设置中,关http://www.mnw.cn/news/digi/2688862.html
4.Snapchat表情符号:Snapchat上的表情符号是什么意思?Snapchat是最流行的社交媒体渠道之一, 尤其是年轻人, 在这个平台上有很多独特的功能,当你使用它的时候你会偶然发现。其中一个功能是Snapchat的朋友emoji,你可能会问自己:“Snapchat emojis是什么意思?” 如果你是一个活跃的Snapchat用户,你可能已经注意到了这些表情符号。它们出现在“朋友”选项卡上的朋友姓名旁边,https://www.cifnews.com/article/54212/
5.xg是什么意思?xg是什么的缩写xg是什么意思? xg是什么的缩写 仙姑的拼音简称,有时指特定人物,如何洁,就被指做何仙姑,简称XG。 网络语言是指产生并运用于网络的语言。网络语言从网络中产生或应用于网络交流的一种语言,包括中英文字母、标点、符号、拼音、图标(图片)和文字等多种组合。https://henan.china.com/m/news/ms/2022/1130/2530325909.html
6.积目里的暗语是什么积目暗语字母释放是什么意思积目-青年文化社交平台,开启目的社交第一户,首创目的语言系统,省略长编大论的开场白,用目的图标证明自己。下面小编就为玩家带来积目里的暗语是什么,一起来看看吧。 积目里的暗语是什么 积目游戏简介 积目app是一款网络通讯的社交聊天软件,在这里你可以找打与你有共同话题,志同道合的朋友一起畅聊人生,积目平台广阔为https://3g.ali213.net/gl/html/327891.html
7.微信名称后面的小人是什么意思微信名称后面的小耳朵是什么意思微信名后面小人的意思就代表了他(她)的性别,粉红色的小人代表女生,蓝色的小人代表男生。微信名后面的小人可以让我们判断对方的性别。 微信名称后面的小耳朵是什么意思 耳朵代表的意思是听筒模式,当聊天窗口中对方名称后面有了耳朵图标,说明账号开启了听筒播放语音消息功能。此时如果收到一条语音消息,点击播放时,语音是https://www.qqtn.com/article/article_324945_1.html
8.一文读懂地理标志产品地理标志产品是什么意思→买购网1 原产地域产品保护是什么?中国原产地域产品名单 2 国家免检产品取消了吗?国家免检产品目录 3 最具市场竞争力品牌图标 商务部最具市场竞争力品牌名单 4 出口免验是什么意思 出口免验认证品牌有哪些 国家出口免验企业名单 5 驰名商标国际保护制度 国际驰名商标认定 国外驰名商标有哪些 6 一个案例看懂注册资https://www.maigoo.com/news/567840.html
9.itunes是什么意思itunes只有苹果可以用吗苹果自带的itunes怎么如今,苹果手机已经非常普及了,这也代表了科技的进步,苹果手机里有个itunes,很多人不知道这个itunes是什么怎么用,其实itunes是苹果手机里非常重要的一个功能。那么itunes是什么意思?itunes只有苹果可以用吗?苹果自带的itunes怎么用?下面一起来看看吧。 一、itunes是什么意思 https://www.qizuang.com/gonglue/shouji/106544.html