- 回调地狱:
在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱。- 代码阅读性非常差
- 浪费性能
- 不方便维护
// 三十个不同请求,同时拿到所有的数据
ajax("",function(res1){
ajax("",function(res2){
ajax("",function(res3){
ajax("",function(res4){
ajax("",function(res5){
ajax("",function(res6){
// 1,2,3,4,5,6
console.log(res1,res2.....)
})
})
})
})
})
})
- Promise: 中文 承诺
- ES6中新增的本地对象
- 用来优化异步程序的回调地狱问题
- 自身存在三个状态:正在进行时,已完成,已失败
- 基础语法
var p = new Promise(function(resolve,reject){
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
p.then(function(){
console.log("已完成");
}).catch(function(){
console.log("已失败")
})
3.在ajax中的使用
function ajax(){
//resolve 函数:内部定义成功时我们调用的函数 value => {}
//reject 函数:内部定义失败时我们调用的函数 reason => {}
return new Promise(function(resolve,reject){
// 开启异步的程序
// 异步程序执行完毕,得到状态后,根据状态执行已完成或已失败
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
}
ajax().then(()=>{}).catch(()=>{})
//then方法: (resolved, rejected) => {}
//onResolved函数: 成功的回调函数 (value) => {}
//onRejected函数: 失败的回调函数 (reason) => {}
//指定用于得到成功value的成功回调和用于得到失败reason的失败回调
//返回一个新的promise对象
//catch方法: (rejected) => {}
//rejected函数: 失败的回调函数 (error) => {}
- promise的方法
- 实例的方法
- var p = new Promise(()=>{})
- p.then()
- p.catch()
- 构造函数的方法
- Promise.all([p1,p2,p3]); 返回一个新的promise, 只有所有的promise都成功才成功, 只要有一个失败了就直接失败
- Promise.race([p1,p2,p3]); 返回一个新的promise, 第一个完成的promise的结果状态就是最终的结果状态
- 实例的方法