公司法
当前位置: 首页 法律大全

promise 获取数据(自己造轮子超详细)

时间:2023-08-07 作者: 小编 阅读量: 1 栏目名: 法律大全

“我最近学习了Promise对象的使用,真是太棒了,使用链式调用代替了嵌套回调,代码书写起来很方便还便于阅读”小白说。“OK,成交了”小白晃了晃手里的星巴克优惠券。在这之前要确保你完全明白如何使用他的各个方法。this.status用来存放执行状态。最后我们来看下完整的Promise代码实现。“完美运行,非常棒,难怪您会先让我学习发布/订阅模式,非常感谢”小白向老麦克竖起了大拇指。

“我最近学习了Promise对象的使用,真是太棒了,使用链式调用代替了嵌套回调,代码书写起来很方便还便于阅读” 小白说。

麦克黑:“是的,Promise是一种异步编程解决方案,尤其在多接口调用的时候会起到非常大的作用,方便开发” 。

小白挠挠头说:“我阅读了代码知道了他的使用方式,我知道他有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),也能够在项目中熟练使用,但我并不知道Promise内部的实现原理” 。

麦克黑:“如果你感兴趣,我觉的你可以尝试自己造轮子,来自己写一个Promise对象,”

小白:“如果可以的话就太棒了,但是我应该如何着手写一个自己的Promise对象呢?”

“当然可以,不过,以下谈话价值两杯咖啡外加一个鸡肉卷”麦克黑狡黠的一笑。

“OK,成交了” 小白晃了晃手里的星巴克优惠券。

今天我们来写一个Promise对象

一。在这之前要确保你完全明白如何使用他的各个方法。如果还不清楚那么就去看下es6的文档,不然下面的内容可能会看不明白

二。你完全了解发布/订阅模式,这会然让你对后面的代码更容易理解,如果还不清楚就去看下我们上次的谈话 《教你如何用ES6发布/订阅模式约女朋友》”

“那么首先你来写一个最常用的Promise的使用方法”老麦克说到

“没问题”

“写的不错,那么我们就编写一段代码让这段代码能够正常的运行”。

首先我们编写一个Promise方法

在Promise方法里我定义了 两个数组 分别用来存放 成功时和失败时要执行的函数,你还记得发布订阅者模式吗?

this.status 用来存放执行状态。 this.value存放 返回的内容(不管成功与否)

接下来我们执行了 startResolve(this, fn); 方法。但现在我还不准备讲解他的实现方式。

我们先实现then方法

当我们调用then方法的时候首先会判断this.status的状态

  • this.status =0 则 执行 addQueue
  • this.status =1 则 执行 reject
  • this.status =2 则 执行 reject

那么我们首先看下addQueue方法。

addQueue方法的实现

你看到了吗,开始push了,就像发布订阅模式一样。

resolve方法的实现

看下成功数组(resolves)里有没有函数,如果没有直接返回false ,如果有函数我们就把失败数组(rejects)的函数清除掉。修改status的状态为 1,也就是resolve 解析成功然后调用resolves 列表里的函数,也就是我们从then里的函数push进来的函数。

reject方法的实现

和resolve是一个道理,你懂的,不解释。

最后我们来看下startResolve都干了些什么。

startResolve() 方法的实现

看到了吧,延迟执行,在这里我们用setTimeout来实现延迟在实际的es6的promise对象中他使用的是 asap模块来实现的

var asap = require('asap/raw');

总结:

也就是说我们先执行了then方法,把then里的两个匿名函数push到了promise的成功函数数组(resolves)和失败函数数组里(rejects),然后在执行pormise里的函数等成功或者失败以后再调用then里提供的方法。懂了吗?

最后我们来看下完整的Promise代码实现。

到此我们的代码编写完毕,最开始的代码还记得吗?

在浏览器中运行一下来验证我们的代码是否成功!

“完美运行,非常棒,难怪您会先让我学习发布/订阅模式,非常感谢”小白向老麦克竖起了大拇指。

    推荐阅读
  • 合肥徽宴楼罍街店怎么样(合肥狮城徽宴楼)

    据此,合肥高新区法院一审判决,合肥佳源徽宴楼餐饮有限公司立即停止侵害安徽狮城徽宴楼饮食管理有限公司相关商标专用权的行为,并赔偿狮城徽宴楼经济损失3万元。佳源徽宴楼不服一审判决,提起上诉。近日,合肥中院二审驳回上诉,维持原判。

  • 打着火怠速下多少转最好(打着火怠速下100转最好)

    我们一起去了解并探讨一下这个问题吧!打着火怠速下多少转最好1000转最好。车辆在冷车时启动。发动机为了尽快进入状态,会在高转速下运行,俗称热车~如果说你车一启动就在1000转以下,这个你要等待下。转速还再下降,说明你车辆的怠速过低,需要提高一点~如果始终保持不变的转速,说明你车在启动之前,状态很好,不需要热车。

  • 植物大战僵尸搞笑动画植物是反派(青春守沪)

    青春守沪青年报·青春上海记者范彦萍“有一天,小草正在散步,突然病毒老大冲了过来小草很害怕,撒腿就跑,眼看病毒老大就要追上来了,忽然,西瓜和辣椒跑了过来,与病毒老大发起了战斗……”最近,上海理工大学附属小学教育。

  • 波比认猪猪侠老大(超人特工队强势回归)

    《超人特工队2》的焦点在妈妈海伦身上,她骑着重型机车阻止各种悲剧,屡创功劳。续集《超人特工队2》时隔14年强势回归。《超2》延续首集的内容,由于超人身份引起疑虑,有心人士希望让超人重新在社会获得重视,但事情并非想象的简单,正义感与超能力毫无用武之地,可以想象巴鲍勃的无力感。除了妈妈与小儿子,片中的酷冰侠、小飞、小倩、巴鲍勃,以及其他英雄例如“砖头”与“空间女侠”等,都各有特色,贡献了很多笑点。

  • 猜成语一个太阳和一个星星(众多星星围绕月亮)

    大家好,看图猜成语,你最棒!昨天答案分别是:背道而驰,一鸣惊人,空中楼阁,如虎添翼,拔刀相助成语释义:背道而驰:朝着相反的方向跑。比喻行动方向和所要达到的目标完全相反。比喻增添力量,使强大的更加强大,或使凶恶的更加凶恶。每天进步一点点,离成功更进一步,加油!

  • 湖南端午节有哪些风俗拨龙舟(端午佳节看龙舟飞渡)

    沅江和溆水泛舟是江口的魅力所在。溆浦的传统龙舟一般头高尾翘,成梭子形,全长大约在26至28米之间,尾部翘起呈燕尾状,尾高达2.8米,可载70余人。两艘龙舟共108人,意取梁山泊108将。凡成年男子不管身处何地均必须赶回参加,或组织或自发,供四面八方慕名而来的客人亲友观赏。铜湾镇今年将有30多艘龙舟下水,场面非常热闹。全长约28米,28节,可坐人24节,计48人。黄溪口龙舟比赛没有号令,没有起跑线,观众是裁判。

  • 红米note5a手机一直重复重启该怎么办(这5种办法都可供选择)

    红米note5a手机一直重复重启该怎么办?红米note5a手机一直重复重启该怎么办首先遇到这个情况,先查看一下手机的是否还有电量,如果没有足够的电量的话,红米Note就会出现这个问题,解决这个问题的方法很简单,那就是为手机充电。另外,红米Note无限自动重启的也有可能是因为安装了root之后,把系统的自带的软件卸载掉,从而导致红米Note无限重启。

  • 饭后多久运动(饭后多久运动合适及原因)

    吃完饭多长时间可以运动,主要看采取运动强度是怎么样的如果是轻度运动,比如太极拳或者散步,如果不是太饱的情况之下,饭后10分钟左右就可以进行但是如果是一些高强度的体育锻炼,需要2个小时后甚至更长时间,比如长跑、打篮球、拳击、健身等建议饭后2小时以上,甚至更久再活动,我来为大家科普一下关于饭后多久运动?如果是轻度运动,比如太极拳或者散步,如果不是太饱的情况之下,饭后10分钟左右就可以进行。

  • 鳜鱼养殖周期,育苗培育、鱼种培育及成鱼养殖3个阶段

    鳜鱼养殖周期主要分为鱼苗培育阶段、鱼种培育阶段及成鱼养殖阶段。在放进鳜鱼苗之前,鱼池都要进行消毒,然后还可以放一些培育水质用来培育饵料鱼。