幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

自学前端Promise的理解和应用,好程序员分享Promis

  一、Promise小白怎么用?从一个故事开始吧1、先来一段废话故事
  您是一名在古老迷失城市中探险的冒险家。您身处一间装饰华丽的房间中,四周布满了古老的壁画和雕塑。您发现有两个通道分别通向不同的方向,分别是:一个黑暗的通道和一个明亮的通道。
  黑暗的通道中充满了神秘的气息,您能感受到其中蕴含的古老力量。您并不知道它会带您去哪里,但您可以感受到其中蕴藏的危险和未知。另一方面,明亮的通道看起来温暖舒适,您可以看到远处照耀的阳光。您能听到一些欢快的音乐声,似乎在那个方向上有一些人在欢庆。
  现在,您需要在这两个通道之间做出选择。您会选择哪一个通道呢?您的选择将会影响您接下来的冒险之旅。2、再来看一段神秘的小短片
  https:drive。weixin。qq。coms?kAOoAUwfiAAwVgJbsSaAUEAQbjAFk
  3、这么久了还不进入正题
  先来了解几个单词,几个Promise的术语
  Promise的三个状态:pending(等待状态)、fulfilled(已成功状态)和rejected(已失败状态)
  Promise的三个常用回调函数(咱说的是常用):
  1。实例化对象时传入的回调函数
  2。then方法的传入的两个回调函数
  3。catch方法传入的一个回调函数
  以作业为例,继续深入了解Promise
  1、开始写作业,此时Promise状态为pending,我们可以理解为初始状态,也可以理解为业务处理中
  2、作业完成情况有两种,一种是写完了,一种是被狗吃了
  3、无论哪种情况,必须要告诉老师,成功了就通过resolve通道暂存数据,同时会更改状态为成功fulfilled;失败了就通过reject通道暂存数据,同时修改状态为rejected。
  4、老师如何获取resolve或reject通道传来的数据呢?可以使用Promise对象的。then方法获取resolve或reject的结果,或者使用。catch方法获取reject通道的信息。
  5、简单来一段代码看看
  constpnewPromise(function(resolve,reject){resolve(通过成功通道存储数据)})。。。如果不使用then,提取,则数据一直暂存在p对象中提取结果p。then(function(val){console。log(val)})
  6、这些写法都是固定的,建议使用promise之前一定要充分了解回调函数
  7、咱们再升级一下,写作业用了5秒钟
  constp1newPromise(function(resolve,reject){写作业用了5秒钟,5秒钟之后,把成功的作业暂存到resolve通道中setTimeout((){resolve(这是作业)},5000)})上面代码中调用了resolve的时候,then里面的回调函数才会触发,这里有个时间差或者时空差的感觉p1。then(function(val){console。log(val)})
  8、再升级一下,这作业他也有被狗吃了的时候,我们假定5秒钟之外就被狗吃了,5秒钟之内就是完成的
  constp2newPromise(function(resolve,reject){生成一个16秒之间的随机数consttimeMath。random()40002000setTimeout((){if(time5000){resolve(成功交作业啦)}else{reject(作业被狗吃了,耗费了{time秒})}},time)})成功使用then来接,失败了怎么拿到参数呢?用then的第二个参数来拿失败的参数p2。then(function(val){console。log(val)},function(err){console。log(估计是被狗吃了,err)})
  9、除了then的第二个参数可以拿到失败的结果,还可以通过catch方法拿到结果,一会再讨论这两种用法的区别,先看catch的用法,注意这里需要连用
  p2。then(function(val){console。log(val)})。catch((reason){输出失败原因,大概率是被狗吃了console。log(估计是被狗吃了,reason)})
  10、再看一种常用的连用的写法
  newPromise(function(resolve,reject){生成一个16秒之间的随机数consttimeMath。random()40002000setTimeout((){if(time5000){resolve(成功交作业啦)}else{reject(作业被狗吃了,耗费了{time}秒)}},time)})。then(function(val){console。log(val)})。catch((reason){输出失败原因,大概率是被狗吃了console。log(估计是被狗吃了,reason)})
  11、一些需注意的地方
  1。resolve和reject只是一个形参的名字,对应实际的值是promise内部的函数,调用这两个其实调用的就是promise内部的某个函数而已,这个名字可以随便去改,例如
  newPromise(function(ok,fail){此时此刻形参叫ok,但实际代表的是promise内部函数ok(ojbk)})。then((res){promise内部会存储数据,传给res这个变量,此时res值就是ojbkconsole。log(res)})
  2。newPromise(构造器的参数是一个函数),这个函数会同步执行,代码执行到这里的时候就会立即执行
  12、小结
  1。Promise通过构造函数同步执行,执行结果调用promise的内部函数存储,通常叫resolve和reject,一个是成功时存储存储使用的通道,另一个是失败时存储的通道,无论存储到哪个通道中,都是写代码的人去定义的
  2。then有两个参数,分别是两个函数类型的参数,第一个参数是在调用resolve时会触发,第二个参数是在调用reject时触发
  3。catch方法可以替代then的第二个参数,拿到reject结果
  13、附赠then第二个参数和catch的区别
  在then的第一个参数里面的代码,如果出现异常的时候,不用手动的try。。。catch,通过promise实例对象的。catch可以捕获then内出现的异常,但注意,catch不会捕获构造函数代码中的错误,来看例子
  newPromise(function(ok,fail){setTimeout((){故意5秒后触发k的报错console。log(k)},5000)})。then((res){console。log(res)})。catch(error{这个时候,error是拿不到那个错误的,他不负责console。log(k)所在代码块中出现的错误console。log(error)})
  再看一个catch方法能捕获什么地方的错误
  大概就是这么个大概二、为什么要这么用,图个啥
  使用Promise的主要原因是他可以解决回调地狱(回调嵌套)问题,让代码变得更优雅,逻辑更清晰
  举一个生活中的例子,早上起床第一件事是要穿拖鞋,第二件事是洗漱,第三件事是穿衣服,第四件事是查看身手要钱,第五件事是打开自家房门出去开车上班,每件事都需要串行,每一步与下一步都有关联关系
  functionfoo(){1、穿拖鞋开始setTimeout((){1、2秒后穿拖鞋完成2、洗漱开始setTimeout((){2、2秒后洗漱完成3、穿衣服开始setTimeout((){3、穿衣服完成。。。。不好意思看官,后边还有好几个步骤咱就意思一下,再写就吐了},2)},2)},2)}foo()
  就写这几层吧,是不是太恶心了
  newPromise((resolve,reject){1、穿拖鞋setTimeout((){resolve(穿拖鞋搞定)},2000)})。then(val{等待穿拖鞋完成后,会调用这个函数2、洗漱注意此处!!!,必须使用return返回一个新的promise来完成链式调用constpnewPromise((resolve,reject){setTimeout((){resolve(洗漱搞定)},2000)})returnp})。then(val{3、穿衣服,此处直接返回,没有使用中间变量returnnewPromise((resolve,reject){setTimeout((){resolve(穿衣服搞定)},2000)})})。then(val{4、查看身手要钱returnnewPromise((resolve,reject){setTimeout((){resolve(查看身手要钱搞定)},2000)})})。then(val{5、开车去上班元气满满的一天})
  就图这
  三、Promise其他方法
  那么多方法,不讲那么多,race、all什么的网上一抓一大把说说语法糖await和async的用法
  先了解一个基础规则
  await必须修饰的是Promise对象
  await必须在async中使用
  await只能接收resolve通道的结果,reject结果会导致报错
  await修饰的代码在执行时,代码是卡住的,类似于alert,这句代码不执行完,后边的代码不会向下执行,这也类似于线程同步执行的概念,这也是await有用之处
  async修饰的必须是函数
  async修饰后的函数在执行之后会转为Promise对象
  看一段简单的代码
  asyncfunctionfoo(){letkawaitnewPromise(function(resolve,reject){setTimeout((){resolve(qfedu)},2000)})console。log(k)}foo()
  这样用倒是更麻烦,我们把要处理的事黏黏糊糊多弄一些试一试
  asyncfunctionfoo(){letlevel1awaitnewPromise((resolve,reject){1、穿拖鞋setTimeout((){resolve(穿拖鞋搞定)},1000)})拿着第一步的结果,去第二步进行操作letlevel2awaitnewPromise((resolve,reject){setTimeout((){resolve(level1洗漱搞定)},1000)})letlevel3awaitnewPromise((resolve,reject){setTimeout((){resolve(level2穿衣服搞定)},1000)})letlevel4awaitnewPromise((resolve,reject){setTimeout((){resolve(level3查看身手要钱搞定)},1000)})console。log(level4,之后开车去上班,元气满满的一天)}foo()
  输出结果:
  这样代码看起来更加简洁,当然要重点考虑的问题是在整个从上到下的调用过程中,任何一个环节出现问题,都会影响下面的代码
  再来,我们把代码聚焦到foo()方法调用之前和调用之后
  console。log(1)foo()这个会输出穿拖鞋搞定洗漱搞定穿衣服搞定查看身手要钱搞定。。。。。。等console。log(2)
  思考一下,程序输出的顺序
  注意,使用async包裹的代码,属于异步代码,会在同步代码之后执行
  我们给按钮添加一个点击事件,看点击按钮如何让程序使用await顺序执行
  asyncfunctionfoo(){letlevel1awaitnewPromise((resolve,reject){1、穿拖鞋setTimeout((){resolve(穿拖鞋搞定)},1000)})拿着第一步的结果,去第二步进行操作letlevel2awaitnewPromise((resolve,reject){setTimeout((){resolve(level1洗漱搞定)},1000)})letlevel3awaitnewPromise((resolve,reject){setTimeout((){resolve(level2穿衣服搞定)},1000)})letlevel4awaitnewPromise((resolve,reject){setTimeout((){resolve(level3查看身手要钱搞定)},1000)})console。log(level4,之后开车去qfedu上班,元气满满的一天)}window。onclickfoo;或者是window。onclickasyncfunction(){todo。。。awaitnewPromise。。。awaitnewPromise。。。awaitnewPromise。。。。。。}
  实际场景中,await与async通常用来处理ajax请求类代码,让代码更简洁,再次强调,await只接收resolve结果,注意reject和error的错误要使用try。。。catch。。。处理异常。
  今日的好程序员的分享就到这里,想了解更多,欢迎评论区探讨,或者dd小源

2年2。11亿镑!C罗成香饽饽,刷新足坛第一高薪纪录,姆巴佩导读:近来C罗遭到了部分球迷的批评,他想要逃离老特拉福德球场的需求,虽然无可厚非,但对荣誉的极度渴望,又让他显得无情,葡萄牙巨星是否会终老于曼联,目前没有人可以知道。不过在《直……入伏后,建议中老年人遵循老传统饮4茶少1事,对身体好伴随着滚滚热浪,一年之中最热的三伏天也近在眼前了。今年从7。16日开始正式踏入初伏,一直到8月24日才能结束长达40多天的高温生活。在这上蒸下煮、酷暑难耐的伏天,就算是身体素质……赛力斯10月卖了12047辆几乎全是华为站台的问界稿源:快科技11月1日,赛力斯发布公告称,10月汽车销量12,047辆,同比增长461。37;本年累计销量61,622辆,同比增长832。82。目前,赛力斯旗下车型……古天乐伦敦被偶遇!面部僵硬如蜡被指撞脸三星堆,人群中身高瞩目饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!10月26日,有网友表示在伦敦街头偶遇古天乐,还附上了随手拍的照片,引发热议。照片中,古天乐身着蓝色棒球……国产手机这么强了,还那么多人买iPhone?看看果粉怎么说按照数据显示,到2021年底时,国产手机在全球已经拿下了55以上的智能手机市场份额。而在中国市场,国产手机更是拿下了80左右的智能手机市场份额。而这20左右的非国产手机品……辽宁男篮得冠,姚明为什么不来南昌给辽宁颁奖?今晚CBA总决赛辽宁本钢对浙江广厦迎来总决赛第4场,大概率辽宁队会以4:0夺取总冠军。而就在前几天CBA官方宣布姚明将不会来南昌为辽宁队颁发总冠军,这一操作让广大球迷位置迷惑。……为何人人都爱逍遥丸?只因它的7种联合用药,妙不可言我最近失眠了,咋整?逍遥丸。你是不是有毒?它不是女性妇科的常用药吗?还有,上次我胃口差,你也是说逍遥丸,这玩意包治百病?对此,我只能说,许多人对逍遥丸的认知,……读完毛选,不再羡慕天才人生在世,总是会遇到各种各样的困难,一个人面对困难的态度决定了他是否能战胜困难。有首歌曲唱得好阳光总在风雨后,乌云上有晴空。人的一生可以比喻成爬山,有的人在山顶狂欢,有的……2022骑行318攻略D8相克宗到红龙乡小提示:各位有没发现,长途骑行干翻我们的往往不是几十公里的上坡,而是连绵不绝的起伏路。第一个起伏:相克宗村3593m12km剪子湾山隧道4210m20km熊宗卡旅游服务站……金龙鱼游到了谷底今日股市全线飘红,又恰逢双11,股民嗨了,而大消费板块的龙头,油矛金龙鱼却游不起来。自上市后短短2个多月的狂欢之后,金龙鱼留个股民的只剩下噩梦。过去22个月以来,金龙鱼股……人体开始衰老时,身体有什么信号?这些信号占了什么种类?小区59岁的甘叔是个养生达人,平时很注重自己的健康。退休后,看着自己身边的老朋友一个接一个生病住院,甘叔很不舒服。因此,空闲的时候,甘叔经常出去锻炼,饮食健康,工作有规律,害怕……黄仁勋半导体行业已接近极限多年来,开发解决人工智能应用程序的软件和芯片一直是英伟达使命的核心,也是创始人兼首席执行官黄仁勋几乎每时每刻都在谈论的话题。黄仁勋和他的妻子周五晚上宣布向俄勒冈州立大学捐……
2022年幽默风趣富有哲理的金句(三七)1。人要有一种我不入地狱谁入地狱的心里底线,才能享受从地狱到天堂的幸福。2。小三都有野心。野心勃勃才是狼的本性,狗才安于现状。3。刚开始背锅,内心翻江倒海,背的锅多……15岁全红婵太美!锅盖头抢镜,过年没回家,发文表决心担起责任北京冬奥会已经开始了,中国冰壶队取得开门红,让人激动不已。而接下来,冬奥会开幕式也将举办,肯定会引起世界各国的关注,祝中国代表团取得好成绩。奥林匹克赛事是全球最盛大的赛事,有大……世界上最舒适和豪华的14个机场作为一个狂热的旅行者,我去过世界各地的许多机场。虽然一些只是基本的,并完成了它的工作,其他超越他们提供的奢侈品和设施。虽然有些已经一尘不染,但有些可能需要另一轮拖地。然而,我们……泡泡袖短款针织衫,牛仔长裙,小个子女生不能错过每个周一,需要穿得明亮一点来点亮自己的上班热情哈哈哈,有和我同感的朋友么?〔摸头〕〔摸头〕今天我的摄影师跟我说,让我给大家来点搭配心得,仔细一想,我不是每期都在给大家分享……不理解,打野球赚得比CBA多,就放弃打职业?现在随着CBA选秀的越办越好,不少大学生球员都得以通过选秀的方式,来实现自己打职业的梦想,但随之而来的是,网络上流行着一种不靠谱的说法,说有大学生球员选秀被选上后,因为打CBA……开年第一部国漫,高口碑彰显文化自信文刘珞琦李佳蕾编辑刘珞琦责编杜思梦1月1日,由上海美术电影制片厂、bilibili联合出品的动画短片集《中国奇谭》在B站播出,豆瓣开分达9。5分,短片集……李兰娟早上是养肝黄金期,坚持吃5种早餐,或可助养护肝脏新冠疫情的爆发,虽然给我们的生活带来了沉重的灾难,但是也正因如此,让我们认识了很多默默付出的医学工作者,他们奋斗在疫情的一线,为人民的健康保驾护航,李兰娟院士就是其中之一。……孩子患有腺样体肥大,一定要手术治疗吗?有很多家长发现,自己家的孩子出现了张口呼吸、打鼾等现象,有的家长因为担心孩子年纪小,而一直犹豫要不要做腺样体手术,这是很多家长担心的问题,一方面担心手术会给孩子带来各种问题,另……冬天的第一场雪我一个人在这里,站在这座冰冷的城市,等待这个冬天的第一场雪,你在哪里呢我的爱人,一直盼望着能和你的相聚,等待着兑现你当初的承诺,在这个冬季你一定会拥抱着我。这个冬天没有给……季节交替,孩子易生病,提前预防很重要来源:咸宁日报掌上咸宁报道一场秋雨一场寒,气温的下降,让市民明显感到了凉意。孩子们在享受秋日的凉爽和快乐时,也容易因为穿脱衣服不当而着凉。俗话说,换季时小孩要比成人……一个人在家吃火锅,晒圈火了,网友纷纷求陪吃,还愿意洗锅导语:一个人在家吃火锅,晒圈火了,网友纷纷求陪吃,还愿意洗锅!自从去海底捞吃了一次火锅,我就再也不想出去吃了,真是纳闷怎么会那么贵,不如在家自己做一顿吃着实在而且特别省钱……37岁朱珠产后晒哺乳照,用毛巾遮挡隐私部位喂奶,淡妆出镜状态明星母亲可以说都是非常伟大的,她们在忙于演艺圈的事业同时,还担当着作为母亲哺育孩子的责任。热依扎曾经在街头被发现带着泵奶的机器在身上,作为一个新手妈妈对孩子可谓是尽职尽责,也是……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网