ES6 --promise了解
1)Promise 作用
A)主要用于异步计算
B)可以将异步操作序列号
C)对象之间传递和操作Promise,帮助处理队列
2)为什么诞生了Promise? Javascript中包含大量的异步操作
3)异步操作的常见语法
A)事件侦听与响应
B)回调($.ajax,$(function(){})),异步影响不太大
但是由于node.js诞生,并且‘无阻塞高并发’特性,使用异步操作依赖加强。
4)异步回调导致问题
A)回调地狱(不好维护)
B) 无法正常使用return和throw
C)无法查看堆栈信息(每一回调都会重新开启一个)
D)多个对调之间难以建立联系
5)Promise设计
new Promise(
function(resolve,reject){
//一段耗时很长的异步操作
resolve(); //数据处理完成
reject(); //数据处理出错
}
).then(function A(){
//成功,下一步
},function B(){
// 失败,做相应处理
});
A) Promise是一个代理对象,他和原先要进行的操作并无关系;
B)它通过引入一个回调,避免更多的回调
6)Promise有3个状态
A)pending 待定,初始状态
B)fulfilled 实现,操作成功
C) rejected 被否决,操作失败
Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤
Promise 状态一经改变,不会在变。
图解:
7)promise案例(定时执行)
console.log('here we go');
new Promise( resolve => {
setTimeout(()=>{
resolve('hello');
}
,2000);
}).then(value=>{
console.log(value+'world');
});
8).then()
A)状态响应函数可以返回新的Promise,或其他值
B)如果返回新的Promise,那么下一级.then()会在新Promise状态改变之后执行
C) 如果返回其他任何值,则会立刻执行下一级.then()
注意: 如果.then()里面有.then()的情况
解决: a) 因为.then()返回的还是Promise实例 b)会等里面的.then()执行完,在执行外面的。 c)对于我们来说,此时最好将其展开,会更好读。
练习 1)
2)
3)
4)
9) 错误处理
a)Promise 会自动捕获内部异常,并交给rejected 响应函数处理
b)throw new Error('错误信息').catch(message => {} )------推荐使用这种,catch可以捕获之前所有的错误;
10).catch()+ .then()如何处理?
catch() 也相当于promise 回调,如何没有错误,则fulfilled状态执行then。如果抛出错误,则rejected状态不执行then;
建议:在所有队列的最后加上.catch(),以避免漏掉错误处理造成意想不到的问题;
10) Promise 常用的函数
A) Promise.all() 批量执行 和 .map()连用;
* Promise.all([p1,p2,p3....])用于将多个Promise实例,包装成一个新的Promise实例;
* 返回的实例就是普通的Promise;
* 他接受一个数组作为参数
* 数组里可以是Promise对象,也可以是别的值,只有Promise会等待状态改变;
* 当所有的子Promise都完成,该Promise 完成,返回值是全部值的数组;
* 有任何一个失败,该Promise失败,返回值是第一个失败的子Promise的结果;
B) 实现队列
第一种: .forEach()
第二种 .reduce()
C) Promise.resolve()
返回一个fulfilled的Promise实例,或原始Promise实例;
* 参数为空,返回一个状态为fulfilled的Promise实例
* 参数是一个跟Promise无关的值,同上,不过fulfilled响应函数会得到这个参数;
* 参数为Promise 实例,则返回该实例,不做任何修改;
* 参数为thenable,立刻执行.then()
D) Promise.race()
类似Promise.all(),区别在于他有任意一个完成就算完成;
常见用法:
* 把异步操作和定时器放在一起
* 如果定时器先触发,就认为超时,告知用户;
11) Promise 业务中使用
A) 把回调包装成Promise最为常见,他有两个显而易见的好处:
* 可读性更好
* 返回的结果可加入任何Promise队列
B) 把任何异步操作包装成Promise
12) 如果在IE中使用promise?
两个选择: A) 只想实现异步队列 jQuery.defered
B) 需要兼容所有平台: BlueBird ,Promise polyfill
13) 异步函数 async/ await
ES2017新增运算符,新的语言元素
* 赋予 JavaScript 以顺序手法编写异步脚本的能力
* 既保留异步运算的无阻塞特性,还继续使用同步写法,
* 还能正常使用 return / try / catch
转载于:https://www.cnblogs.com/sunqq/p/9618098.html
ES6 --promise了解相关推荐
- 十分钟快速了解 ES6 Promise
转载自 十分钟快速了解 ES6 Promise 什么是Promise Promise最早由社区提出并实现,典型的一些库有Q,when, bluebird等:它们的出现是为了更好地解决JavaScrip ...
- 解读ES6 Promise
详解ES6 Promise异步 文章目录 详解ES6 Promise异步 前言 一.Promise是什么呢... 二.resolve 三.reject 四.then() & catch() 五 ...
- 流程控制: jQ Deferred 与 ES6 Promise 使用新手向入坑!
谢谢n͛i͛g͛h͛t͛i͛r͛e͛大大指出的关于Promise中catch用的不到位的错误,贴上大大推荐的文章Promise中的菜鸟和高阶错误,文章很详细说明了一些Promise使用中的错误和指导. ...
- es6 Promise是什么?
# es6 Promise是什么? 1. Promise 是一个构造函数 自带三个方法 all.resolve.reject,原型上(prototype)有then.catch等的几个常用的方法. ` ...
- ES6 — Promise基础用法详解(resolve、reject、then、catch,all,)
ES6 - Promise基础用法详解 Promise 是一个构造函数,它自身拥有all.reject.resolve这几个眼熟的方法, 原型上有then.catch等同样熟悉的方法. 所以,在开始一 ...
- ES6 promise 用法小结
ES6 promise 用法小结 Js 是一⻔单线程语言,早期解决异步问题,大部分是通过回调函数进行. 比如我们发送 ajax 请求,就是常见的一个异步场景,发送请求后,一段时间服务器给我们响应,然后 ...
- Vue进阶(四十五):精解 ES6 Promise 用法
文章目录 一.前言 二.链式操作用法 三.reject 用法 四.catch 用法 五.all 用法 六.race 用法 七.总结 八.拓展阅读 一.前言 复杂难懂概念先不讲,我们先简单粗暴地把Pro ...
- ES6 Promise原理
ES6 Promise原理 一.Promise是什么 二.为什么会有Promise 1.回调地狱 + 异步同步事件调用顺序带来的双重伤害 2.回调事件的分离 三.Promise的三种状态 1.reso ...
- 初探 es6 promise
javascript是单线程程序,所有代码都是单线程执行.导致javascript的网络请求都是异步执行,异步执行可以通过回调函数实现: setTimeout(callback,1000); func ...
- es6 --- Promise封装读取文件操作
Promise: es6中为了解决回调地狱问题而产生的 Promise的参数 Promise的参数是一个函数. 每个Promise在实例化时,都会立即执行参数里的函数 const p = new Pr ...
最新文章
- 大宗商品(Bulk Stock)交易
- MSB3721 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe“ 已退出 返回代码为1
- https证书互信解决方案—创建私有CA并申请证书
- 常见通信协议HTTP、TCP、UDP的简单介绍
- 多亏了Google相册,如何一键释放Android手机上的空间
- 带Prometheus的Spring Boot和测微表第4部分:基础项目
- tp5 linux路由不跳转,thinkphp5路由不生效一直跳到首页的解决方法
- python 解决bytes和str之间 出现 TypeError的问题
- linux oracle 失败怎么办,Oracle 11g SELinux原因启动失败的解决办法
- 特征提取、特征描述、特征匹配的通俗解释
- Doris之审计日志插件
- android 下载网络图片并缓存
- 数据结构10——强连通
- 使用java发送邮件(支持多人)
- 阿里矢量图标库字体图标使用(胎教)
- 把图片url 伪静态 php,php url伪静态化的实现方法详解
- UNIX和LINUX系统下载中心
- 不加好友实现QQ在线代码状态临时会话
- Unity3D--学习太空射击游戏制作(一)
- 服务器背板电源维修,814835-B21 814832-001 DD-2901-3C-LF G9 HPE服务器电源背板