ES6新特性之Promise篇
来源:互联网 发布:php判断水仙花数 编辑:程序博客网 时间:2024/06/05 00:52
前几天换工作面试,总会碰到问ES6的新特性问题,而新特性中的Promise更是几乎90%都会问到。
一直知道ES6中有这个新特性主要是解决JS异步执行时候回调函数嵌套回调函数的问题(callback hell), 更简洁地控制函数执行流程;之前没有深入研究过这个问题,面试也就嘴炮了;
最近看了读了几篇同仁们关于promise的学习见解,看不如做,于是自己也想扒拉扒拉,巩固一下技能,学习学习;
首先我们来看如下这个函数:
这个函数看起来有点混乱,不利用后期代码的维护,我们用ES6的promise来将这个函数重写如下:
利用Promise改造后的函数明显容易理解和阅读.
接下来,去认识一下这个Promise:
1.基本使用:
其实通过上面的例子我们已经看到通过new实例化Promise, 构造函数需要两个参数, 第一个参数为函数执行成功以后执行的函数resolve, 第二个函数为函数执行失败以后执行的函数reject;与之对应的then方法接收两个参数, 第一个为函数的成功回调, 第二个为函数的失败回调:
resolve(X) X:是要传递给下一个then中回调函数的参数的值,如果X为空,那么就无需给下一个then传值,如下程序:
上图中的resolve(X)中的参数X就是then方法回调函数function(data)中的data;通过每一次回调return一个Promise实例,实现异步层层回调。如果是同步的就不用return Promise实例,直接then;
每一个实例化的Promise都有三个状态;pending(等待) rejected(拒绝) resolved(解决) ,默认的状态为pending,如果执行了resolve(), 那么这个promise的状态会变为resolved,如果执行了reject(), 那么这个promise的状态就会变成rejected, 而且这些状态是不可撤销的,一经更改,不会再变了;
通过以上的实践其实我们已经基本掌握Promise的then方法。
接下来,我们再接着看看catch方法:
catch方法实际就是如果异步函数抛出了错误了, 错误会被捕获, 并执行catch方法,如下:
Promise中的错误会被层层传递给下一个Promise对象,直到被捕捉为止:
构造函数Promise有四个方法, Promise.all, Promise.race, Promise.reject, Promise.resolve:
Promise.all:
可以发现Promise构造函数的all方法的参数是一个由元素是实例组成的数组,当全部resolve后调用then方法输出对应的结果数组。
Promise.race, Promise.reject, Promise.resolve这三个方法后续再继续研究研究。
既然promise是解决异步js问题的,那么就来实践实践,用promise来封装个GET请求;
运行结果(利用Node.js搭建的服务器,请求json数据,不存在跨域):
目前就搞到这,后续再继续研究研究。
具体可参考:Promise/A+ 规范
- ES6新特性之Promise篇
- ES6新特性之promise
- ES6核心内容之新特性
- es6新特性之generator
- es6之promise被坑记
- es6之promise被坑记
- 11、ES6 之Promise
- ES6之Promise对象
- ES6之Promise
- ES6之promise
- ES6新特性之解构使用细节
- ES6新特性之Symbol使用细节
- 轻松学会ES6新特性之生成器
- ES6新特性之let命令--读书笔记
- ES6之-字符串的新特性
- JavaScript之ES6的常用新特性
- es6新特性之箭头函数
- 【ES6】ES6的新特性
- sklearn.utils.shuffle解析
- Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门
- C++日期类的实现
- Golang设计模式之外观模式
- Python list 创建方法
- ES6新特性之Promise篇
- 信号完整性分析方法-1-信号完整性分析概述
- SQL RDBMS A Brief Overview of Common Relational Database Management Systems
- cookie和session理解
- redis如何获取有序集合指定范围的个数
- laravel5.4+vue+vux+element的环境搭配
- pytorch扩展
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛-L. The Heaviest Non-decreasing Subsequence Problem
- linux下LAMP环境的搭配