一、简介
1.Promise是什么
Promise是ES6引入的进行异步编程的解决方案(原来的解决方案是直接使用回调函数)
通俗来讲,Promise就是一个构造函数,promise对象用来封装一个异步操作并可以获取其成功或者失败的结果值
常见异步操作的回调函数解决方案(旧)
1.fs 文件操作
require('fs').readfile.('./index.html',(err,data)=>{})
2.数据库操作
3.AJAX
$.get('/server',(data)=>{})
4.定时器
setTimeout(()=>{},1000)
2.为什么要使用Promise
(1)支持链式调用,可以解决回调地狱问题
- 回调地狱问题的缺点
- 不便于阅读
- 不便于异常处理
(2)指定回调函数的方式更加灵活
- 原来解决方案必须在启动异步任务前指定回调函数
- promise:启动异步任务 => 返回 promise 对象 => 给 promise 对象绑定回调函数(甚至可以在异步任务结束后指定多个回调函数来处理结果)
二、Promise的属性
1.Promise的状态
promise的状态就是实例对象中的一个属性 【PromiseState】,它有三个可能的值
- pending 未决定的(初始值)
- resolved / fulfiled 成功
- rejected 失败
一个promise对象只能改变一次状态,且只能由 pending 改为 resolved 或 rejected,无论变为成功或者是失败,都一定会有一个结果数据,成功的结果一般称为 value,失败的结果一般称为 reason
2.Promise的结果值
promise的结果值是实例对象中的另一个属性【PromiseResult】,它保存的是异步任务成功或者失败的结果值,在后续调用 then 方法的时候就可以将值取出来进行相关的操作