Promise 的含义

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

注意,为了行文方便,本章后面的resolved统一只指fulfilled状态,不包含rejected状态。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。

Promise也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

如果某些事件不断地反复发生,一般来说,使用Stream模式是比部署Promise更好的选择。

es6 Promise 的含义相关推荐

  1. 十分钟快速了解 ES6 Promise

    转载自 十分钟快速了解 ES6 Promise 什么是Promise Promise最早由社区提出并实现,典型的一些库有Q,when, bluebird等:它们的出现是为了更好地解决JavaScrip ...

  2. Vue进阶(四十五):精解 ES6 Promise 用法

    文章目录 一.前言 二.链式操作用法 三.reject 用法 四.catch 用法 五.all 用法 六.race 用法 七.总结 八.拓展阅读 一.前言 复杂难懂概念先不讲,我们先简单粗暴地把Pro ...

  3. 解读ES6 Promise

    详解ES6 Promise异步 文章目录 详解ES6 Promise异步 前言 一.Promise是什么呢... 二.resolve 三.reject 四.then() & catch() 五 ...

  4. 流程控制: jQ Deferred 与 ES6 Promise 使用新手向入坑!

    谢谢n͛i͛g͛h͛t͛i͛r͛e͛大大指出的关于Promise中catch用的不到位的错误,贴上大大推荐的文章Promise中的菜鸟和高阶错误,文章很详细说明了一些Promise使用中的错误和指导. ...

  5. es6 Promise是什么?

    # es6 Promise是什么? 1. Promise 是一个构造函数 自带三个方法 all.resolve.reject,原型上(prototype)有then.catch等的几个常用的方法. ` ...

  6. ES6 — Promise基础用法详解(resolve、reject、then、catch,all,)

    ES6 - Promise基础用法详解 Promise 是一个构造函数,它自身拥有all.reject.resolve这几个眼熟的方法, 原型上有then.catch等同样熟悉的方法. 所以,在开始一 ...

  7. ES6 promise 用法小结

    ES6 promise 用法小结 Js 是一⻔单线程语言,早期解决异步问题,大部分是通过回调函数进行. 比如我们发送 ajax 请求,就是常见的一个异步场景,发送请求后,一段时间服务器给我们响应,然后 ...

  8. ES6 Promise原理

    ES6 Promise原理 一.Promise是什么 二.为什么会有Promise 1.回调地狱 + 异步同步事件调用顺序带来的双重伤害 2.回调事件的分离 三.Promise的三种状态 1.reso ...

  9. 初探 es6 promise

    javascript是单线程程序,所有代码都是单线程执行.导致javascript的网络请求都是异步执行,异步执行可以通过回调函数实现: setTimeout(callback,1000); func ...

最新文章

  1. 计算机原理说课教案,《 计算机组成原理 》 说课
  2. python自学入门教程-Python学习教程(一)自学资源分享
  3. You must install #39;hg#39; on your build machine
  4. android 微信分享gif图,android后台动态创建图片并实现微信分享
  5. 最大公约数 和 最小公倍数
  6. Visual Studio Tip 之 如何查看隐形的空格(white space)和制表符(tab)
  7. css鼠标拖拉卡顿_66个值得收藏的CSS开发技巧
  8. PHP array_splice
  9. 黑客大曝光:VoIP安全机密与解决方案
  10. 图说:Windows 8 Copy的呈现变化
  11. linux源码中的核心数据结构
  12. 讨教大学|FMEA成功实施的关键是什么?
  13. Vue 中的 key 有什么作用?
  14. 微软服务器安全补丁,Microsoft Windows SMB服务器安全更新(4013389)补丁 官方勒索病毒漏洞修复版(图文)...
  15. 历代iPhone主要参数对比,更新于2022年03月
  16. 基于JavaWeb的餐厅点餐系统设计与实现
  17. C#(十三)之字符串string
  18. 数据查询和业务流分开_基于大数据的舆情分析系统架构 - 架构篇
  19. Log4j2配置之Appenders
  20. html输入某天得到周几,HTML “input week年周”输入控件简介说明

热门文章

  1. LBS由ip查经纬度
  2. 基于最简单的FFmpeg包封过程:视频和音频分配器启动(demuxer-simple)
  3. 让nginx支持文件上传的几种模式
  4. 简单易用的IT运维服务器管理程序分享!
  5. 学习开发webpart
  6. Shiro 权限标签
  7. 程序员的算法课(10)-字符串排序算法实例(纯代码)
  8. 程序员的进阶课-架构师之路(2)-数组
  9. java编程二十_Java语言程序设计(二十)编程练习
  10. webService简单入门实战(一)