科百科
当前位置: 首页 范文大全

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

时间:2023-08-07 作者: 小编 阅读量: 3 栏目名: 范文大全

“我最近学习了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代码实现。

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

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

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

    推荐阅读
  • 好听有个性的男宝宝名字(男孩起名字大全)

    男孩起名字大全:有韵味的男宝宝名字推荐乐天代表的是一种积极乐观的情绪。明铮体现的是男子的智慧与骨气。崟磊形容男子伟岸,有气魄,光明磊落,不同凡响。砺羽表示经历一番磨难后终会有所成就。安若指男子像稳固的泰山一样有坚定不移的意志。沛濯寓指积极向上、精力充沛、勇往直前。君锋指男孩如谦谦君子,开朗乐观,与锋字组合的相当出彩。和忻和与忻两个字的寓意都非常的积极、乐观。

  • 苹果手机怎么修改锁屏密码(苹果手机如何修改锁屏密码)

    苹果手机怎么修改锁屏密码解锁你的手机,在主界面找到“设置”。我们手机里大部分功能管理都是这里进行。点击进入“设置”界面,在这里你可以看到声音、TouchID与密码、电池、隐私等多种内容。点击进入“触控ID与密码”后,需要先输入一边密码,然后才能进入“触控ID与密码”的界面。成功输入之后会出现一个类似的新界面,此时在输入新密码。这次的新密码可就不能再轻易泄露了哦~如果再次需要修改密码,重复以上操作即可。

  • 你为何是汉族?只因汉武帝民族大一统?盘点汉族由来三个历史时期

    大家看的其实很明白,这里的“汉人”其实说的还是汉朝的人民而已,随着汉朝统治的终结,汉人的王朝含义慢慢消失,真正意义的汉族人的概念慢慢更加明确!“汉族”的称谓,包含我们五千年先祖的文化传承,一定是我们华夏民族凝心聚力的结果,同时也体现我们中华民族多元化发展的博大胸襟,我们汉族一定可以团结各族同胞实现我们的民族的伟大复兴!#西瓜年度知识大赏##历史故事##汉族的名称是怎么来的##历史#

  • 穿越火线吴磊角色介绍(腾讯穿越火线网剧正式开机)

    超级网剧《穿越火线》今日举行开机仪式,吴磊作为其中一员也出现在现场。《穿越火线》网剧剧情梗概:2019年,想成为电竞选手的少年路小北在游戏中所向披靡,却因为一场意外失去了进入职业队的资格。2008年,落魄的电竞老将肖枫勉强维持着自己的战队。在一次偶然中,路小北与肖枫在一张游戏地图中跨时空相遇。他们各自组建战队,共同研究战术,帮助对方成长。但就在路小北和肖枫彼此鼓励,逆流而上时,一场意外却悄然而至…

  • wap歌词中文翻译(wap中文歌词)

    wap歌词中文翻译?2003年获“全国流行乐坛新人选拔赛湖北赛区”银奖,并在全国推新人总决赛中获新人演唱奖。2005年出道前,陈瑞是宜昌市城建幼儿园高级教师,湖北省省级骨干教师,并摘得宜昌市幼儿教师全能比赛一等奖,湖北省幼儿教师教育知识电视大奖赛最佳选手。

  • 鸡肉松的做法(肉松怎么做)

    14、快打好的时候加入芝麻。

  • 钢琴即兴伴奏左手最简单伴奏方法(钢琴即兴初级入门常用左手伴奏音型1-10图)

    小白可以试试这些音型公式和弦配置玩自己的钢琴即兴弹奏

  • 短文读书笔记大全(康乐斋读书随笔)

    罗氏之《三国》,七实三虚;博主所著,则七虚实三。------干宝著《搜神》,罗氏写《三国》而受益;刘氏作《世说》,房君撰《晋书》为佐料。六读康志耀短篇小说集《唏嘘人生》后本书为作者短篇小说第二集,倾注毕生心血。离奇生动之处假以诙谐流畅之文字,如百川入海,终归雅训。初集多集其早年乡村历闻,此集乃捕捉现代都市生活气息,杂以儿时见异,此二集之所别。