开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
Promise是什么?
1.抽象表达:
Promise是异步编程新的解决方案(旧的是谁? ps:纯函式调用)
2.具体表达:
(1)从语法上来说Promise是一个构造函数
(2)从功能上来说Promise对象用来封装一个一步操作并可以获取其结果
2.1Promise状态改变:
1.pending编程resolved
2.pending编程rejected
ps:只有这2种,并且一个Promise对象只能改变一次,无论成功失败都只有一个结果数据,成功的记过数据称为value,失败的结果数据称为reason
2.2Promise的基本流程:
2.4 Promise的基本使用:
//1.创建一个新的Promised对象
const p=new Promise((resolve,reject)=>{//执行器函数
// 2.执行异步操作任务
setTimeout(() => {
let date=new Date();
if(date%2 == 0){
resolve(value)//3.1如果成功了执行resolve(value)
}else{
reject(reason)//3.2如果失败了执行reject(reason)
}
}, 1000);
})
p.then(value=>{
console.log("成功了"+value);
},reason=>{
console.log("失败了"+reason);
})
2.5 为什么要用Promise?
1.指定回调函数的方式更加灵活:
旧的:必须在启动异步任务前指定
promise:启动异步任务=》返回promise对象=》给promise对象绑定回调函数(甚至可以在异步任务结束后指定)
2.支持链式调用,可以解决回调地狱问题
什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数执行的条件
回调地狱的缺点? 不便于阅读/不便于异常处理
2.6 Promise常用Api
1.Promise构造函数:Promise(excutor) {}
excutor函数:同步执行(resolve,reject)=> {}
resolve函数:内部定义成功时我们调用的函数 value=>{}
reject函数:内部定义成功时我们调用的函数 reason=>{}
ps:excutor会在Promise内部立即同步回调,异步操作在执行器中
2.Promise.prototype.then方法:(onResolved,onRejected) =>{}
onResolved函数:成功的回调函数(value)=> {}
onRejected函数:失败的回调的函数 (reason)=>{}
ps:指定用于得到成功的value的成功回调和用于得的失败的reason的失败回调,返回一个新 的promise对象
3.Promise.prototype.catch方法:(onRejected)=> {}
onRejected函数:失败的回调函数(reason) => {}
ps:then()的语法糖相当于:then(undefined,onRejected)
4.Promise.resolve 方法: (value) => {}
value: 成功的数据或 promise 对象
ps: 返回一个成功/失败的 promise 对象
5.Promise.reject 方法: (reason) => {}
reason: 失败的原因
ps: 返回一个失败的 promise 对象
6.Promise.all 方法: (promises) => {}
promises: 包含 n 个 promise 的数组
ps: 返回一个新的 promise, 只有所有的 promise 都成功才成功, 只要有一个失败了就 直接失败
7.Promise.race 方法: (promises) => {}
promises: 包含 n 个 promise 的数组
ps: 返回一个新的 promise, 第一个完成的 promise 的结果状态就是最终的结果状态