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

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代码实现。

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

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

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

    推荐阅读
  • 正月禁忌与讲究(农村俗话腊月忌尾)

    如果你在农村长大,或者是现在在农村的话,那肯定听说过这样一句俗语,即腊月忌尾,正月忌头。首先我们从字面上来理解,这句话就是说腊月里月尾有很多忌讳,而正月里月初有很多讲究,这里的头和尾就是说的月初和月末。2019年迎接猪年,那你知道春节前后都有哪些禁忌呢?

  • 蜡笔是什么梗(蜡笔的含义)

    下面更多详细答案一起来看看吧!蜡笔是什么梗蜡笔=lb=layback=延迟就比方某个作品出现好久了,但是你却刚刚知道,通俗点就是村里刚通网络,落伍了的意思。不少吧友最近突然爱上了这句话,很多人第一反应以为看到了蜡笔小新呢。

  • 说普通话的内容资料(关于说普通话内容)

    说普通话的内容资料普通话即现代标准汉语,是以北京语音为标准音,以北方话为基础方言,以典范的现代白话文作品为语法规范。是通行于中国大陆、香港、澳门、台湾及海外华人华侨间的共通语言,是中国官方、教学、媒体确定的标准言语。中国大陆称为“普通话”,台湾地区称为“国语”,国外又称华语。推广普通话和推行规范文字有利于推动中文信息处理技术的发展和应用。

  • 评论会增加推荐量吗(评论的正确方式)

    我们都知道要想领到足够多的金币,活跃度就必须持续保持在高位。多评论是提高活跃度的有效方式之一,因为评论多了,用户的粘性度会更高,流量也会越多。首先,我们评论一个作品的字数最好超过十个字。因为评论的本质就是互相探讨问题,而大部分表达清楚一个意思,需要十个字以上。其次,评论不要全部发表情。很多朋友为了省事,评论就发一堆表情。这违反了评论设置的目的,是平台非常不喜欢的。活跃度自然业很难有提升。

  • 趣抖音和抖音是一个公司吗 趣抖音是什么公司

    硬件型号:iPhone12系统版本:iOS14.2APP版本:v14.1.0趣抖音和抖音是一个公司吗?趣抖音和抖音看似很像的名字,到底是否属于同一家公司呢?“趣抖音”冒用商标的行为,侵犯了抖音公司“抖音”、“趣抖音”及“抖音图形商标”商标权。“趣抖音”APP与抖音、字节跳动不存在任何*或隶属关系。

  • 菠萝头冬天可以水培吗(吃剩下的菠萝头别扔)

    我们在超市或者是市场买菠萝,都是让老板将皮削掉,我们在削皮的时候,一定要让老板保留这个菠萝头,拿回家中之后,将菠萝头砍下来,就可进行水培了。如果我们平时喜欢吃菠萝的话,那就一定要将菠萝头保留下来,将其种成水培盆栽,简单又好看。

  • 蛋糕回缩是什么原因(蛋糕回缩是啥原因)

    下面内容希望能帮助到你,我们来一起看看吧!蛋糕回缩是什么原因配方问题:配方中油或水过多,导致蛋糕过重,会被自身重量压塌。消泡后的蛋液容易沉淀,烤中变成布丁层,这也是蛋糕回缩的可能原因。

  • 出对子有不当之处请老师指点(员外出对子说童子狡猾)

    出对子有不当之处请老师指点李东阳,字宾之,号西涯,湖广长沙府茶陵州,明代诗人、书法家、政治家。李东阳自幼在父亲的指导下,读了很多书,小小年纪,就显露出非凡的才华。有一次,李东阳精心制作了一只很大的蝴蝶风筝,相约几个伙伴到外面放风筝。李东阳毫不犹豫地答应了。王员外一听,余,他还是选择了哈哈大笑,他没想到一个孩童竟然如此聪慧,惊讶之“唯公廉”,将风筝还给了李东阳。

  • 柠香凉拌木耳的制作方法(柠香凉拌木耳如何制作)

    我们一起去了解并探讨一下这个问题吧!柠香凉拌木耳的制作方法食材:木耳100克,柠檬1个,姜丁适量,生抽5克,香菜适量,醋5克,盐1克,糖5克,小米椒适量。首先把木耳撕成小块。然后锅内烧水,把木耳放进去,给木耳断生。锅内热油,油温5成热,加入小米椒爆香。把爆香后的小米椒倒入木耳上,再加上2片柠檬片,搅拌均匀。

  • 烤串肉的做法(烤串肉制作方法介绍)

    以下内容希望对你有帮助!烤串肉的做法猪梅肉洗干净。切大块放盆子里。加适量特级生抽。撒上自己研磨的孜然粉搅拌均匀腌制至少两小时。将烤肉架子的两头零件固定在烤箱自带的转轴上。将肉串固定在架子上一共八根。插进烤箱中间那个转轴的洞里用200度烤25分钟。烤好以后及时取出来。戴手套将签子拆下来,放在盘子里撒上炒过的孜然粉。