promise是什么
宏观来说:
promise是JS中进行异步编程的新的解决方案
具体表达:
从语法来说:promise是一个构造函数
从功能来说:promise对象用来封装一个异步操作并可以获取其结果
promise的状态改变
pending --> resolved (成功)
pending --> rejected (失败)
- 只有2种状态,而且一个promise对象只能改变一次
- 无论变为成功还是失败,都会有结果数据
- 成功数据一般称为value,失败的结果数据一般称为reason
流程
基本使用
//1、创建一个新的promise对象
const p = new Promise((resolve, reject) => {
//2、执行异步任务
setTimeout(() => {
const time = Date.now()
//3.1.如果成功了,调用resolve(value)
if (time % 2 == 0) {
resolve('成功的数据:time=' + time)
} else {
//3.2.如果失败了,调用reject(reason)
reject('失败的数据:time=' + time)
}
}, 1000)
})
p.then(
value => {
console.log('成功的回调', value);
},
reason => {
console.log('失败的回调', reason);
}
)
为什么要使用promise
1、指定回调函数的方式更加灵活
旧的(纯回调函数):必须在启动异步任务前指定
promise:启动异步任务 => 返回promise对象 => 给promise对象绑定回调函数(甚至可以再异步任务结束之后再指定)
2、支持链式调用,解决回调地狱问题
什么是回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数执行的条件
回调地狱缺点:不便于阅读 而且 不便于异常处理
解决方案:promise链式调用
终极解决方案:async/await