promise之我见
在我们平时的方法中有很多方法是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之我见相关推荐
- ES6 Proxy 性能之我见
ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...
- 我见过的最糟糕代码,看了都说好!
点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Nothing is impossible for a willi ...
- setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)
本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...
- java的不足_Java不足之我见
Java不足之我见 作者:未知 文章来源:www.jspcn.net 发布日期:2005年01月19日 许多人都在使用Java开发程序,本人也是其中之一,作为一名 有一定软件工作经历的开发人员, ...
- C++多线程:异步操作std::async和std::promise
文章目录 std::async 简介 使用案例 std::promise 简介 成员函数 总结 之前的文章中提到了C++多线程中的异步操作机制 C++ 多线程:future 异步访问类(线程之间安全便 ...
- ES6中的Promise详解
Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...
- 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出
1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) {if (success){r ...
- promise实现多个请求并行串行执行
早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...
- 异步编程之Promise(2):探究原理
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
最新文章
- R语言问题解决:Error: Discrete value supplied to continuous scale
- python中的set
- IIS网站的权限设置问题
- java mysubmail_关于MyBatis10种超好用的写法(收藏)
- [angularjs]初学小记1
- JVM性能分析与定位
- rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践
- python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...
- MyEclipse10 离线图文安装SVN插件教程
- PAIP.pdf使用
- BIM技术在工程成本管控中有哪些优势
- java 设置图标_设置java窗口的图标
- et文件丢失怎么恢复?5种恢复方法轻松掌握
- 802.11/wlan/wifi/无线相关学习资料整理
- 国潮席卷!这家高端酒店品牌推出以唐风宋韵为基础的“新国风”酒店
- 大文件切割和大文件合并
- 色盲悖论_关于被色盲
- 使用简单原始的办法排序CMap中的路径
- 【已解决】ibyaml-cpp.a(memory.cpp.o): relocation R_X86_64_PC32 against symbol `_ZTVSt16_Sp_counted_baseIL
- java socket demo及其缺点
热门文章
- Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误
- 【qduoj - 1012】反转数字(模拟,水题)
- ACM中关于计算几何(浮点数)的精度问题
- 4.4)深度卷积网络:人脸识别和神经风格转换
- EasyOcr 安装(linux、docker)、使用(gin、python)
- Java (jdk win 10)
- 第二课计算机ppt,第二课计算机系统.ppt
- linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序
- Callable创建多线程
- 9型转x型 cobol_兰州一餐馆推鸳鸯牛肉面 9种面型一面多吃