一、Promise是什么?
-
理解
-
抽象表达:
-
Promise 是一门新的技术(ES6 规范)
-
Promise 是 JS 中进行异步编程的新解决方案(备注:旧方案是单纯使用回调函数)
-
-
具体表达:
-
从语法上来说: Promise 是一个构造函数
-
从功能上来说: promise 对象用来封装一个异步操作并可以获取其成功/失败的结果值
-
-
-
promise 的状态改变
-
pending 变为 resolved
-
pending 变为 rejected
-
说明: 只有这 2 种, 且一个 promise 对象只能改变一次无论变为成功还是失败, 都会有一个结果数据,成功的结果数据一般称为 value, 失败的结果数据一般称为 reason。
-
二、Promise 构造函数的基本用法
const p = new Promise((resolve, reject) => { if (...) { // succeed resolve(result); } else { // fails reject(Error(errMessage)); } }); p.then(value => { console.log(value.toString()) },reason => { console.log(reason) })
三、为什么要用Promise?
-
指定回调函数的方式更加灵活
-
旧的: 必须在启动异步任务前指定
-
promise: 启动异步任务 => 返回 promie 对象 => 给 promise 对象绑定回调函数(甚至可以在异步任务结束后指定多个)
-
-
支持链式调用, 可以解决回调地狱问题
-
什么是回调地狱?
- 回调函数嵌套调用, 外部回调函数异步执行的结果是嵌套的回调执行的条件,格式上不断地进行缩进。
-
回调地狱的缺点?
-
不便于阅读
-
不便于异常处理
-
-
解决方案?
- promise 链式调用
-
终极解决方案?
-
async/await
-
-
什么是回调地狱?