56星座屋
当前位置: 首页 星座百科

promise请求常用的方法和区别(掌握Promise的逻辑方法)

时间:2023-05-25 作者: 小编 阅读量: 3 栏目名: 星座百科

res.ok){thrownewError('HTTPerror!

作者: by.Genesis

出处:https://www.cnblogs.com/xyzhanjiang/p/14090357.html

Promise 是 ES2015 新增的对象

Promise 对象有几个组合方法,可以将多个承诺合并成一个进行处理

分别是 Promise.all, Promise.race, Promise.allSettled, Promise.any

这些方法都可以接收一组承诺,返回一个新的承诺

Promise.all(values)

其中参数 values 是一个可迭代对象,比如数组

在后文中使用词语“成功”表示承诺 resolve,“失败”表示承诺 reject

Promise.all

Promise.all 方法返回的承诺会等到参数中所有的承诺都成功之后才会成功,只要其中有一个失败了则返回的承诺也会立即失败,不会等到那些还挂起的承诺有结果

Promise.all 方法可以用来处理那些缺一不可的逻辑

示例:同时发出多个请求都成功后才能进行下一步

const coffee = fetch('/coffee')const tea = fetch('/tea')const me = fetch('/me')// 我全都要const res = await Promise.all([coffee, tea, me])

Promise.race

Promise.race 方法返回参数中最快的那个承诺,如果最快的那个承诺成功则返回的承诺也会成功,否则就是失败,不会等到那些还挂起的承诺有结果

示例:给一个复杂任务设定一个超时时间

// 设置一个定时器,时间到了就 reject 一个承诺const timeout = new Promise((resolve, reject) => {setTimeout(reject, 3000)})const missions = fetch('/missions')try {const res = await Promise.race([timeout, missions])// missions 任务成功} catch () {// 时间超过 3 秒了或者任务失败了}

Promise.allSettled

Promise.allSettled 方法返回的承诺对象会等到参数中所有的承诺对象都完成后才成功,无论怎样该方法返回的承诺都不会失败

和 Promise.all 方法的区别

Promise.all 方法需要参数中的所有承诺都成功

而 Promise.allSettled 对参数中的承诺是成功还是失败并不关心,只要有结果就行

示例:一次性上传多个文件,其中上传成功和上传失败的互不影响,在一轮上传任务完成之后,可以筛选出那些上传失败的重新上传

const upload = file => {const formData = new FormData()formData.append('file', file)return fetch('/upload', {method: 'POST',body: formData})}document.querySelector('input[type="file"]').addEventListener('change', function(e) {if (!e.target.value) returnconst files = e.target.filesconst promises = files.map(file => upload(file))const res = await Promise.allSettled(promises)// 全部上传任务都完成了,找出上传失败的重新上传})

该方法是 ES2020 新添加的方法

Promise.any

Promise.any 方法返回一组承诺中最快成功的那个承诺,如果参数中所有承诺都失败了,那么返回的承诺也失败

和 Promise.race 方法的区别

Promise.race 返回参数中最快的那个承诺,无论它是成功还是失败

而 Promise.any 关注的是参数中最快同时还必须成功的那个承诺

和 Promise.all 方法的区别

Promise.any 和 Promise.all 是完全相反的

Promise.any 参数中全部承诺都失败了才会失败,Promise.all 参数中全部承诺都成功了才会成功

Promise.any 参数中一旦有一个承诺成功了返回的新承诺就会成功,Promise.all 参数中一旦有一个承诺失败了返回的新承诺就会失败

示例:同时加载一组图片,但是我们只需要用到其中的一张,就可以用 Promise.any 方法挑选出最先加载成功的那张图片

const fetchImg = async (url) => {return fetch(url).then(res => {if (!res.ok) {throw new Error('HTTP error!')} else {return res.blob()}})}cosnt img1 = fetchImg('/1.png')const img2 = fetchImg('/2.png')try {const res = await Promise.any([img1, img2])const url = URL.createObjectURL(res)const img = document.createElement('img')img.src = urldocument.body.appendChild(img)} catch () {// 一个都没加载成功 QAQ}

该方法还处于草案中,目前最新的 Chrome, Firefox, Safari 支持

作者: by.Genesis

出处:https://www.cnblogs.com/xyzhanjiang/p/14090357.html

    推荐阅读
  • 献鸠放生告诉我们什么道理三年级(献鸠放生告诉我们的道理是什么)

    献鸠放生告诉我们什么道理三年级?献鸠放生是一个寓言故事,讲述的是晋国建都邯郸有一个权势熏天的大臣叫赵简子,他喜欢过年时百姓替他捉斑鸠送到他的住处让他放生。献鸠放生的文化背景中国汉地的放生活动古已有之。狭义单指人命;广义则指一切人命与禽兽。《列子·说符篇》载:“正生,示有恩也。”

  • 如何做洋葱炒羊肉(怎样做洋葱炒羊肉)

    1、食材:羊肉半斤,洋葱一个。

  • 山楂怎么去核(应该怎么做)

    下面内容希望能帮助到你,我们来一起看看吧!山楂怎么去核选择一根与山楂头大小一样的钢管,10公分左右,壁越薄越好,这样既省力又便于后期清理。清水洗净山楂后,用钢管挖去山楂头部的黑色部分,一是因为这里面存有脏东西,不容易清洗;二是为了从底部向上捅的时候山楂不会裂开,如果不去除顶部,在捅的时候山楂就会裂开。用手摘掉山楂蒂。右手用力握住山楂,左手从底部向头部用力捅,注意要用力均匀。用力把山楂核全部顶出即可。

  • 渣男再不敢玩的三款游戏(小仙女听说你喜欢这款游戏)

    渣男再不敢玩的三款游戏小编嘚嘚小编在小忍计划火了后又一次我们可爱的小仙女做文章。本作最大的魅力就是,和各世代所登场的三位女主角结婚后生下的孩子能力和容貌都会有变化。技能的设置和组合技能的设置也有较大变化,需要好好研究,,总之把敌人的MOTION值打到一定程度后就能使用组合技了。

  • 顿号的用法有哪些(顿号的简单介绍)

    接下来我们就一起去研究一下吧!顿号的用法有哪些顿号表示句子内部最小的停顿,常用在并列的词或词组之间。一般来说,顿号在汉语中主要有两个用途:一是分隔同类的并列的事,通常是单字、词语或短句,当中的停顿较逗号短。二是分隔用汉字作为序号的序号和内文。等于“/”,但“、”是中文符号,“/”是英文符号。

  • 网络推广如何长久发展下去(为什么网络推广这么难做)

    网络推广如何长久发展下去今年行情特别不好,企业生存越来越难。客观来说,经济形势不好确实让各类企业销量下降,但是路还是要继续走,不做连机会都没有!真的什么水花都没有,不想费钱,就一点都不要费!流量大有甚用,绝大部分不是你的客户。这就是典型的花了钱没效果。结果没生意,然后就想不通了。网络推广需要透过现象看本质,冷静下来。

  • 行气是什么意思(行气的意思)

    下面希望有你要的答案,我们一起来看看吧!气运行与全身,对人体的发挥着不可或缺的生理功能。气运行不畅,在体内发生淤滞,人体就会表现出哀声叹气,心情低落,抑郁寡欢,或食后腹满腹胀等等。遇到这种情况,中医就会采用行气的疗法,气机淤滞得以畅通。

  • 黄皮炖汤有什么怪味吗(煮粥煲汤上漂的皮)

    那层皮被老一辈人称之为米油。大米熬制时间越长,糊化越充分,米油就越多,就越容易被人体消化吸收。所以,对于一般人来说没有必要刻意喝米油,尤其是肥胖人群、糖尿病患者更没有必要。奶皮跟牛奶比起来,营养价值差不多,主要成分为蛋白质和脂肪,只是因为水分减少而形成了一层皮,营养成分更加浓缩而已。像是广东的双皮奶,就是用牛奶冷却后形成的皮而做成的美味甜品。

  • 长寿花开花需要满足哪些条件(长寿花怎么打理长得更好)

    长寿花开花需要满足哪些条件温度:长寿花最适宜生长温度通常介于15°C-25°C之间。如果环境温度低于10°C或高于25°C时,那么温度环境就变得不利于其开花了。所以,环境温度应尽量控制在15°C-20°C之间。为了让长寿花开花,建议每天为其提供4小时以上的光照时间。而且夏天气温达到28°C以上时,植株也容易进入休眠状态。但浇水较多时,也容易让其出现徒长,所以需要及时对其打顶。