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了解相关推荐

  1. 十分钟快速了解 ES6 Promise

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

  2. 解读ES6 Promise

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

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

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

  4. es6 Promise是什么?

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

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

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

  6. ES6 promise 用法小结

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

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

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

  8. ES6 Promise原理

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

  9. 初探 es6 promise

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

  10. es6 --- Promise封装读取文件操作

    Promise: es6中为了解决回调地狱问题而产生的 Promise的参数 Promise的参数是一个函数. 每个Promise在实例化时,都会立即执行参数里的函数 const p = new Pr ...

最新文章

  1. 大宗商品(Bulk Stock)交易
  2. MSB3721 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe“ 已退出 返回代码为1
  3. https证书互信解决方案—创建私有CA并申请证书
  4. 常见通信协议HTTP、TCP、UDP的简单介绍
  5. 多亏了Google相册,如何一键释放Android手机上的空间
  6. 带Prometheus的Spring Boot和测微表第4部分:基础项目
  7. tp5 linux路由不跳转,thinkphp5路由不生效一直跳到首页的解决方法
  8. python 解决bytes和str之间 出现 TypeError的问题
  9. linux oracle 失败怎么办,Oracle 11g SELinux原因启动失败的解决办法
  10. 特征提取、特征描述、特征匹配的通俗解释
  11. Doris之审计日志插件
  12. android 下载网络图片并缓存
  13. 数据结构10——强连通
  14. 使用java发送邮件(支持多人)
  15. 阿里矢量图标库字体图标使用(胎教)
  16. 把图片url 伪静态 php,php url伪静态化的实现方法详解
  17. UNIX和LINUX系统下载中心
  18. 不加好友实现QQ在线代码状态临时会话
  19. Unity3D--学习太空射击游戏制作(一)
  20. 服务器背板电源维修,814835-B21 814832-001 DD-2901-3C-LF G9 HPE服务器电源背板

热门文章

  1. html个人简介个人主页网页源码期末大作业0011
  2. Starvis星光全彩摄像机技术
  3. laragon 之Nginx
  4. Ubuntu拼音输入不正常解决
  5. 自动监控Oracle 表空间信息并发送邮件脚本
  6. serviceBattery mac换电池 mac怎么换电池mac拆机
  7. 微信小程序授权登录取消授权重新授权处理方法 附可用代码
  8. 星空云协同开发入门(一)
  9. Revit二次开发之 自定义选项卡排在最前端
  10. phabricator代码提交自动触发Jenkins token发版(一)