在js新版本出现之前,回调地狱自身就是解决方式
新版本出现之后,在新的语法中,提供了一些更优雅的处理方案
1.Promise(ES6)
原理:
Promise承诺,异步
正在执行时…异步过程
成功
失败
成功或失败虽然是将来才会发生,但是在承诺开始的时刻,就需要提前预置
发生了成功,必然不会执行失败
发生了失败,必然不会执行成功
语法:(语言的法律法规,固定!!!!!)
Promise是一个构造函数
new的同时立即传参,参数是回调函数,回调函数身上可以接受两个参数,分别是:resolve(success,成功),reject(error,失败)
var p = new Promise(function(a,b){
// 正在执行....
// 此处放置异步的程序
// a就是在then中的第一个回调函数,表示成功要做的事情
// b就是在catch中的第一个回调函数,表示失败要做的事情
});
p.then(function(){
// 成功的预置函数
});
p.catch(function(){
// 失败的预置函数
});
总结:
promise就是一种固定语法,固定写法,固定传输
所有的原理都在promise的内部被封装
封装的意义是什么?忽略细节
当然了忽略细节,并不是不关注
而是先会用,再考虑内部原理
Promise的三个状态
1、Pending 异步的事情正在执行
2、Fulfilled 异步的事情成功了
3、Rejected 异步的事情失败了
2.在Promise的基础上,再使用async/await(ES7)
async function fn(){
var res1 = await new Promise(....)
var res2 = await new Promise(....)
var res3 = await new Promise(....)
var res4 = await new Promise(....)
console.log(res1,res2,res3,res4);
}