在我们平时的方法中有很多方法是promise封装的,

有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

上边这句话摘自阮一峰老师的博客    但是讲是讲出来了,总感觉有些朦胧,深挖一下,上图看看这个promise里边到底都有什么

需要注意的是Promise 的首字母要大写 因为是构造函数 不然会报错 ,之前犯过这样的错误,找了好久,提醒一下

promise的三种状态

PromiseValue 用法

上边说了catch和then,一个接收成功一个接收失败,promise里边还有一个finally方法,他是不管成功还是失败只要promise执行完毕这个函数都会被执行

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected

只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。

如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

那么讲了这么一大堆  这个promise他到底有什么用处呢,就是为了解决回调地狱,之前在网上看到过这么一个图片

这代码看起来是不是很酸爽,回调一层套一层,多了的话感觉就是一个大型的冲击波,冲击着js开发者的心灵

举个例子

but到这里貌似和回调没有什么毛区别  ,他的优势体现在哪里,so 看图

打印了一下then方法   发现里边还是一个promise,所以说return的结果可以继续被.then,且结果可以继续被调用

如果用回调的话就会造成回调地狱现象

promise的话大大的降低了维护成本和让代码看起来更优雅

promise除了原型链上的方法之外还有一些他本身的方法,如下图

promise.all()

这个方法允许传入一个数组 他会执行里边所有的promise实例  如果传入的不是promise也会被转换成promise

并且只有在传入的所有的参数都返回resovled的时候all()方法才会是resolve,其中有一个参数是rejected的话

all()方法状态就是变成rejected

promise.race()

这个方法相对于上边的all()而言,它更像是比赛跑,他会返回第一个执行完毕的promise实例的状态

promise.resolve()

这个方法会把一个对象创建成一个promise对象并return出resolve状态出来

如果传进去的是一个promise对象的话  那么就会被直接return出来并执行resolve

promise.reject()

同理

该方法也会返回一个新的 Promise 实例,该实例的状态为rejected并执行reject

如有不足之处请大家批评指正

转载于:https://www.cnblogs.com/netUserAdd/p/10449873.html

promise之我见相关推荐

  1. ES6 Proxy 性能之我见

    ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...

  2. 我见过的最糟糕代码,看了都说好!

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Nothing is impossible for a willi ...

  3. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)

    本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...

  4. java的不足_Java不足之我见

    Java不足之我见 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 许多人都在使用Java开发程序,本人也是其中之一,作为一名 有一定软件工作经历的开发人员, ...

  5. C++多线程:异步操作std::async和std::promise

    文章目录 std::async 简介 使用案例 std::promise 简介 成员函数 总结 之前的文章中提到了C++多线程中的异步操作机制 C++ 多线程:future 异步访问类(线程之间安全便 ...

  6. ES6中的Promise详解

    Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...

  7. 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出

    1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) {if (success){r ...

  8. promise实现多个请求并行串行执行

    早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...

  9. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

最新文章

  1. R语言问题解决:Error: Discrete value supplied to continuous scale
  2. python中的set
  3. IIS网站的权限设置问题
  4. java mysubmail_关于MyBatis10种超好用的写法(收藏)
  5. [angularjs]初学小记1
  6. JVM性能分析与定位
  7. rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践
  8. python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...
  9. MyEclipse10 离线图文安装SVN插件教程
  10. PAIP.pdf使用
  11. BIM技术在工程成本管控中有哪些优势
  12. java 设置图标_设置java窗口的图标
  13. et文件丢失怎么恢复?5种恢复方法轻松掌握
  14. 802.11/wlan/wifi/无线相关学习资料整理
  15. 国潮席卷!这家高端酒店品牌推出以唐风宋韵为基础的“新国风”酒店
  16. 大文件切割和大文件合并
  17. 色盲悖论_关于被色盲
  18. 使用简单原始的办法排序CMap中的路径
  19. 【已解决】ibyaml-cpp.a(memory.cpp.o): relocation R_X86_64_PC32 against symbol `_ZTVSt16_Sp_counted_baseIL
  20. java socket demo及其缺点

热门文章

  1. Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误
  2. 【qduoj - 1012】反转数字(模拟,水题)
  3. ACM中关于计算几何(浮点数)的精度问题
  4. 4.4)深度卷积网络:人脸识别和神经风格转换
  5. EasyOcr 安装(linux、docker)、使用(gin、python)
  6. Java (jdk win 10)
  7. 第二课计算机ppt,第二课计算机系统.ppt
  8. linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序
  9. Callable创建多线程
  10. 9型转x型 cobol_兰州一餐馆推鸳鸯牛肉面 9种面型一面多吃