一、是什么
- 主要用于异步计算
- 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
- 可以在对象之间传递和操作Promise,帮助我们处理队列
二、产生的原因
- javascript为检查表单而生
- 创造它的首要目标是操作DOM
- 是UI语言,造成页面冻结是大忌,所以,JavaScript的操作大多是异步的,
三、Promise
new Promise(
// 执行器
function (resolve, reject) {
resolve() // 数据处理完成
reject() // 数据处理出错
}
).then(function A(){
// 成功,下一步
}, function B(){
// 失败,做相应处理
})
- Promise是一个代理对象,它和原先要进行的操作并无关系,通过引入一个回调,避免更多的回调
- Promise有三个状态,
pending [待定] 初始状态 实例化
fulfilled [实现] 操作成功 调用 resolve
rejected [被否决] 操作失败 调用 reject
- Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤
- Promise状态一经改变,不会再变
.then()
- .then()接受两个函数作为参数,分别代表fulfilled和rejected
- .then()返回一个新的Promise实例,所以它可以链式调用
- 当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
- 状态响应函数可以返回新的Promise或其他值
- 如果返回新的Promise,那么下一级.then()会在新的Promise状态改变后执行
- 如果返回的时其他的任何值,则会立刻执行下一级.then()
.then()里有.then()的情况
- 因为.then()返回的还是Promise实例
- 会等里面的.then()执行完,再执行外面的
- 对于我们来说,此时最好将其展开,会更好读
Promise.all()
- 它接受一个数组作为参数
- 数组里可以是Promise对象,也可以是别的值,只有Promise会等待状态改变
- 当所有子Promise都完成,该Promise完成,返回值是全部值的数组
- 有任何一个失败,改Promise失败,返回值是第一个失败的子Promise的结果
网友评论