ES6特性 -- Promise特性

一、什么是Promise

1.概念

  • 从语法上来说: Promise是一个构造函数
  • 从功能上来说: promise对象用来封装一个异步操作并可以获取其结果

2.Promise的状态改变

1.    pending变为fulfilled
2.    pending变为rejected
说明: 只有这2种, 且一个promise对象只能改变一次
      无论变为成功还是失败, 都会有一个结果数据
      成功的结果数据一般称为vlaue, 失败的结果数据一般称为reason

二、为什么使用Promise

1.指定回调函数的方式更加灵活

  • 1旧的: 必须在启动异步任务前指定
  • promise: 启动异步任务 => 返回promie对象 => 给promise对象绑定回调函数(甚至可以在异步任务结束后指定/多个)

2.支持链式调用, 可以解决回调地狱问题

1. 什么是回调地狱?

回调函数嵌套调用, 外部回调函数异步执行的结果是嵌套的回调执行的条件

2. 回调地狱的缺点?

不便于阅读

不便于异常处理

3. 一个不是很优秀的解决方案?

promise链式调用

4. 终极解决方案?

async/await

三、如何使用Promise?

1.API

(1). Promise构造函数: Promise (excutor) {}

  1. excutor函数: 执行器 (resolve, reject) => {}
  2. resolve函数: 内部定义成功时我们调用的函数 value => {}
  3. reject函数: 内部定义失败时我们调用的函数 reason => {}

说明: excutor会在Promise内部立即同步回调,异步操作其中执行

(2). Promise.prototype.then方法: (onFulfilled, onRejected) => {}

  1. onFulfilled函数: 成功的回调函数 (value) => {}
  2. onRejected函数: 失败的回调函数 (reason) => {}

说明: 指定用于得到成功value的成功回调和用于得到失败reason的失败回调

返回一个新的promise对象

(3). Promise.prototype.catch方法: (onRejected) => {}

onRejected函数: 失败的回调函数 (reason) => {}

说明: then()的语法糖, 相当于: then(undefined, onRejected)

(4). Promise.resolve方法: (value) => {}

value: 成功的数据或promise对象

说明: 返回一个成功/失败的promise对象

(5). Promise.reject方法: (reason) => {}

reason: 失败的原因

说明: 返回一个失败的promise对象

(6). Promise.all方法: (promises) => {}

promises: 包含n个promise的数组

说明: 返回一个新的promise, 只有所有的promise都成功才成功, 只要有一个失败了就直接失败

(7). Promise.race方法: (promises) => {}

promises: 包含n个promise的数组

说明: 返回一个新的promise, 第一个完成的promise的结果状态就是最终的结果状态

上一篇:promise学习---中断promise链(then回调链)


下一篇:浅析@ResponseStatus的作用、属性、用法、底层原理及使用注意事项