http://www.zhangxinxu.com/wordpress/2014/02/es6-javascript-promise-%E6%84%9F%E6%80%A7%E8%AE%A4%E7%9F%A5/

ES6 JavaScript Promise的感性认知

所以,本文不会详细、完整介绍Promise的使用、特点等。这些您可以参考本文末尾留下的相关文章地址。只会让你对Promise有个感性认知,在脑中塑造出一个物体形象,或大叔、或萝莉、或御姐、或多来A梦、或**棒等。这样,才会有兴趣、才会更快的接受相关技术点、功能、使用技巧等。

OK,首先第1点,Promise是一种形式

注意这里的措辞,“Promise是一种形式”,也就是不要把Promise看成是某些方法、函数之类的。类似于不要把“小姐”看成某个人,而是某种职业。

Promise中文有“誓言”、“承诺”之意。从字面意思我们也似乎体会出一点“形式”的味道。但是,注意这里的转折,根据自己的理解,Promise完全不能按照“承诺”来理解,而是要根据其音译——“普罗米修斯”。普罗米修斯是希腊神话故事中的英雄,名字的意思是“先知”。Promise最初的命名是Futures, “未来”,可见Promise含义不是字面的“誓言”“承诺”之类,而是“先知”“未来”的意思。

那该如何理解“先知”,JS与先知有什么关系?

我们都知道,JS是单线程的,也就是一条线下来的,这是代码世界的一条规则。那么现实世界有与之呼应的吗?——人?No, No, 人是多线程的,人可以一边看动作片,一边撸智深。那是什么东西呢?哈,没错,时间,现实世界里,时间这条线就是单线程的,不会出现两条时间线,这种事是会出现在科幻故事里。

人当下所经历的现实世界中,很多行为结果是未知的,不是即时呈现的。例如,今天的NFL超级碗,巨星曼宁率领的野马队与本赛季黑马海鹰队的比赛。这实际上是个异步的过程,某明星压了1000万赌注野马队赢,比赛的结果会影响这位明星状态。这就类似于JS中发送一个异步的Ajax请求,不同的返回值造成不同的影响。

而Promise则扮演了一个“先知”的角色。预先将你的未来告知,规划好你继续的路。你无需等待最终结果出来,你可以继续你现在的生活。用一个简单的图表示就是下面这样:

如果你是一个先知,你是没有等待、异步这种感觉的。这就是Promise的作用,一种“先知”的形式。好比上帝,已经在他的时间维度的一瞬间规划好了你的一生(因为他有先知的能力)(他无需跟着经历你的时间),虽然你自己依然感受到了时间,以及各种变数。

对于JS代码而言,我们就是上帝。我们能够预知代码的走向,并规划好代码的人生。

回到当下,正在电脑前的我们,想想你会经历的事情,可能就会是下面这样子——沿着时间线,一种事情连着另外一件事,每件事都有多种可能的发展:

这就好比JS世界中的异步操作,例如Ajax请求,现实世界中,大部分的操作结果都不是即时显现的(类似Ajax操作),如果用JS表示我们的一生,那就会是一个超级无限长的嵌套。

实际上,无限的嵌套更符合我们当下所感受的世界的理解。既然如此,那为何我们写代码的时候不喜欢一堆嵌套呢?

很简单,我们写代码的时候,是以上帝的身份来处理代码的,我们是造物主;而不是以代码中的角色身份。目前的JS异步回调就是按照代码视角——随着时间推移,代码中的人和物会经历什么什么。那如何变成先知视角呢?很简单,使用Promise! 而这,就是Promise出现的意义:“将异步操作转换成更符合先知视角的形式展现”!

讲解JS的promise,这篇是专业认真的!相关推荐

  1. vue.js项目实战运用篇之抖音视频APP-第二节:项目基础架构搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  2. js中promise原理及手动基本实现_V2

    前言 上一章中已经讲完了promise最基本实现的原理,本章将在其基础上进行进一步的扩展,以满足更多的使用场景,源码在文章最后哦. 上一章链接:https://blog.csdn.net/weixin ...

  3. 码农干货系列【17】--Wind.js与Promise.js

    示例 先引入wind.js与promise.js: <script src="wind-all-0.7.3.js"></script> <script ...

  4. JS中Promise函数then的奥秘探究

    JS中Promise函数then的奥秘探究 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个 ...

  5. Three.js(2)--->基础篇-Helpers(辅助对象/辅助线)

    在Three.js中有许多的Helper(辅助对象)用来帮助我们的开发. 本篇例举几个常见的,方便理解.以及一些效果 文章目录 前言 一.AxesHelper 二.BoxHelper 三.Box3He ...

  6. vue.js项目实战运用篇之抖音视频APP-第十一节: 注册登录及验证码功能

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  7. JS 利用promise封装setTimeout So easy

    JS 利用promise封装setTimeout So easy 就是一句代码那么简单 , 实际应用可以结合async / await~ /*** @description:延迟|等待函数* @ret ...

  8. C/C++基础讲解(九十一)之游戏篇(模拟扫雷游戏)

    C/C++基础讲解(九十一)之游戏篇(模拟扫雷游戏) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中的奥秘,真的要花费一些功夫,我和大家一 ...

  9. JavaScript之后端Web服务器开发Node.JS基本模块学习篇

    JavaScript之后端Web服务器开发Node.JS基本模块学习篇 基本模块 fs文件系统模块 stream支持流模块 http crypto加密模块 基本模块 因为Node.js是运行在服务区端 ...

最新文章

  1. MySQL中INSERT INTO SELECT的使用
  2. spring解决ajax跨域问题
  3. Django的自带认证系统——auth模块
  4. [学习记录] macOS下的Nginx安装 Nginx基本知识
  5. hua ge ju hao
  6. paip.python ide 总结最佳实践o4.
  7. Delphi 2009 安装序列号
  8. 数字图像处理之简单 JPEG图片压缩
  9. ANR问题分析实例 logcat anr trace
  10. 解决mysqld: [ERROR] Found option without preceding group
  11. 如何在工作中形成自己的方法论(待完善)
  12. ROC-RK3328-CC 开发板开箱和上手指南
  13. Xmind2021分享
  14. python的pyautogui的函数,实现按键精灵
  15. 【头歌】顺序表的基本操作
  16. 18、VXLAN技术介绍与应用场景,附VXLAN手册下载
  17. Android手机获取imei
  18. rclone挂载webdav
  19. atv61/71变频器驱动板图纸施耐德变频器atv61驱动板图纸atv71
  20. 计算机二级不参加会记入诚信档案吗,考生必看!弃考会被记入诚信档案吗?

热门文章

  1. Mac OS X 使用命令sed替换tab
  2. 跟我斗图,我用Python爬虫下载几个G的表情砸死你
  3. 执行前端测试的必要性
  4. centos7部署DM8
  5. kafka 主动消费_SpringBoot2 整合Kafka组件,应用案例和流程详解
  6. 指针 混用 迭代器_对比 C++ 和 Python,谈谈指针与引用
  7. python将二维列表内容写入和读取.csv文件
  8. P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)
  9. 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解
  10. ajax提交无反应,IE中jquery.form中ajax提交没反应解决方法分享