1.什么是Promise?
抽象表达:Promise,是JS进行异步编程的一种新的解决方案
具体表达:从语法上说Promise是一个构造函数,
从功能上说Promise对象是用来封装异步操作并可以获取其结果
2.Promise 状态
promise总共有三个状态,初始化状态为pending,执行成功状态更改为resolved,执行失败状态更改为rejected
const promise = new Promise((resolve, reject) => {
let time = Date.now();
//模拟异步函数
setTimeout(() => {
if ( time %2 == 0 ) {
resolve(time);//如果成功了就执行resolve函数 并把数据value传进去
} else {
reject(time);//如果失败了 就执行reject函数
}
}, 1000)
});
promise.then((value) => {//第一个函数就代表着,执行成功就走第一个函数里面的代码,value接收数据
console.log(value + '成功的回调函数')
},(error) => {//执行失败就会执行第二个函数里面的代码,error接收参数
console.log(error + '失败的回调函数');
})
3.什么是回调地狱,代码如下:
//回调地狱
doSomething(function (result) {
doSomethingElse(result,function (newResult) {
doThirdThing(newResult,function (finalResult) {
console.log('God callback');
},failureCallback)
},failureCallback)
},failureCallback);
回调地狱的缺点:不便于阅读,处理异常也比较麻烦
4.使用promise处理回调地狱
doSomething.then(function (result) {
return doSomethingElse(result);
})
.then(function (newResult) {
return doThirdThing(newResult);
})
.then(function (finalResult) {
return console.log('God callback');
})
.catch(failureCallback);
5.Promise API
1. Promise构造函数: Promise (excutor) { }
excutor函数:同步执行(resolve, reject) =>行}
resolve函数:内部定义成功时我们调用的函数value => {}reject函数:内部定义失败时我们调用的函数reason => { }
说明: excutor 会在Promise内部立即同步回调,异步操作在执行器中执行
2. Promise . prototype . then方法: (onResolved, onRejected) => {}
onResolved函数:成功的回调函数(value) => {}onRejected函数:失败的回调函数(reason) => {}
说明:指定用于得到成功value的成功回调和用于得到失败reason的失败回调|返回 一个新的promise对象
3. Promise . prototype . catch方法: (orRejected) => {}
onRejected函数:失败的回调函数(reason) => {}
说明: then()的语法糖,相当于: then( undefined, onRejected)
4. Promise.resolve方法: (value) => {}
value:成功的数据或promise对象
说明:返回一个成功/失败的promise对象
5. Promise . reject方法: (reason) => {}
reason:失败的原因
说明:返回一个 失败的promise对象
6. Promise .all方法: (promises) => {}
promises:包含n个promise的数组
说明:返回一个新的promise,只有所有的promise都成功才成功,只要有一个失败了就直接失败
7. Promise.race方法: (promises) => {}
promises:包含n个promise的数组
说明:返回一个 新的promise,第” 个完成的promise的结果状态就是最终的结果状态