想象一下,你是一位顶级歌手,粉丝们日夜询问你即将到来的歌曲。

您承诺在它出版时将其发送给这些粉丝。歌手给粉丝提供一份名单。他们可以填写他们的电子邮件地址,这样当歌曲可用时,所有订阅方都会立即收到它。即使出现了非常大的问题,比如工作室发生火灾,导致歌曲无法发布,他们仍然会收到通知。

这就是我们在编程中经常遇到的事情的现实类比。

做某事并需要时间的“生产代码”。例如,一些通过网络加载数据的代码。这就是“歌手”。

一个“消费代码”,期望消费“生产代码”产生的结果。许多函数可能需要该结果。这些是“粉丝”。

Promise 是一个特殊的 JavaScript 对象,它将生产代码和消费代码链接在一起。根据我们的类比:这是“订阅列表”。 “生产代码”花费它需要的任何时间来产生承诺的结果,并且“承诺”使该结果在准备好时可供所有订阅的代码使用。

let promise = new Promise(function(resolve, reject) {// executor (the producing code, "singer")
});

传递给 new Promise 的函数称为执行器。 当新的 Promise 被创建时,executor 会自动运行。 它包含最终应该产生结果的生产代码。 按照上面的类比:执行者是“歌手”。

它的参数 resolve 和 reject 是 JavaScript 本身提供的回调。 这是两个原生对象。

我们的代码只在执行器内部。

当 executor 获得结果时,无论是早是晚,都没有关系,它应该调用以下回调之一:

  • resolve(value) — 如果作业成功完成,带有结果值。
  • reject(error) — 如果发生错误,error 是错误对象。

总结一下:执行器自动运行并尝试执行一项工作。 尝试完成后,如果成功则调用 resolve,如果出现错误则调用 reject。

新的 Promise 构造函数返回的 Promise 对象具有以下内部属性:

  • state — 最初是“pending”,然后在调用 resolve 时更改为“fulfilled”,或者在调用 reject 时更改为“rejected”。
  • 结果 - 最初未定义,然后在调用 resolve(value) 时更改为 value,或者在调用 reject(error) 时更改为错误。

通过现实生活中一个例子来理解 JavaScript Promise相关推荐

  1. 西门子for循环例子_理解JavaScript中的循环缺陷和迭代协议

    如果您已经用JavaScript或任何语言编程了一段时间,for-循环对你来说不应该陌生.您没有注意到许多编程语言,包括JavaScript,已经从使用for-循环使用迭代器-返回给定集合的下一项的对 ...

  2. 现实生活中的例子反应式编程

    编程教育被动做法 - 一个相当困难的事情,而且缺乏教材只会加剧这一进程.大多数现有的培训手册不提供深入的审查,并讨论如何设计项目作为一个整体的架构. 这种材料的目的是帮助初学者开始思考真正的" ...

  3. java 以一个例子来理解面向对象编程思想

    在面向对象的编程中,面向对象的应用是检验你对现实中实际物体和及其关系的抽象能力.在实际编程过程中,你的能力并不是你掌握了多少新的技术,而是对你当前问题的认识的深度,当你理解的足够深的时候,你的框架就出 ...

  4. msdn 上的关于delegate和event的一个例子,理解后加点评论

    using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Event ...

  5. 通过一个例子来理解二维码纠错机制

    1 例子 假设:原始数据为8位,纠错码为6位,原始信息由原始数据+纠错码. 在传输过程中,由于信息干扰等原因,导致原始信息被污染,被污染后有两位数据被修改. 说明 编码 原始信息 0010100110 ...

  6. JavaScript Promise 教程 - 如何在 JS 中解决或拒绝 Promise

    JavaScript Promise Tutorial – How to Resolve or Reject Promises in JShttps://www.freecodecamp.org/ne ...

  7. 深入理解 JavaScript 中的 replace 方法

    2019独角兽企业重金招聘Python工程师标准>>> 字符串替换字符串 1 'I am loser!' .replace( 'loser' , 'hero' ) //I am he ...

  8. 理解JavaScript中的事件

    在很多语言的学习中,"事件"都是一个比较难理解,但是又是一个很重要的概念.JavaScript中的事件处理也是一样,正因为有了事件处理,才会出现Ajax拖动的效果.本文就讨论一下J ...

  9. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

最新文章

  1. 关于使用android系统设备充当web服务器的一点准备
  2. clientHeight、offsetHeight 和 scrollHeight
  3. 移动开发解决方案之玩转输入框
  4. android camera工程师,Android从Camera中获取图片的两种方法
  5. 【Java数据结构与算法】第二章 单链表及简单面试题
  6. python三层设计_推荐3个Python实现算法和设计模式的工具
  7. python是哪个专业学的-专业python培训学校
  8. kindle 3之安装多看系统
  9. 乘幂法求主特征值和特征向量(C++)
  10. 游戏策划关于游戏概念和游戏原型设计
  11. 文档翻译——免费版(word格式、pdf格式)
  12. 第五章 站在巨人的肩膀上
  13. 电脑通过网口共享网络(WIFI)给其他设备
  14. 1.Requests库
  15. thinkphp 打开速度缓慢,大多由于数据库读取问题!解决方法
  16. 模型建模流程及逻辑回归案例
  17. 【TrailHead】Create a test harness app and component
  18. “msg“: “查询失败Text ‘2021-02-25T23:59:59‘ could not be parsed at index 10“
  19. unity lua C# 这边 new 了一个GameObject 对象并发给Lua那边, 这时C# 这边在通过GC释放掉这个对象;lua 那边会报错;遇到这种问题的解决方案
  20. 城市热点认证计费系统应用

热门文章

  1. OSChina 周五乱弹 —— 如果有一天不当程序员了
  2. 网站监控邮件发送方法
  3. mac上好用的写作工具:ia writer 中文版
  4. python飞机大战怎么将图片保存_python 图片抓取 并保存到本地
  5. sql-labs 闯关 11~20
  6. 《TCP/IP协议族》:TCP/IP常用端口大全
  7. 【超哥原创分享】自定义实现日志输出,抛弃任何依赖包,日志输出随心走,弃繁就简,简而不凡
  8. 第十九节 ArrayList集合
  9. linux怎么确定要杀的进程,linux - 什么杀了我的进程,为什么?
  10. win10家庭版安装Docker for Windows及问题处理以及更改为阿里源