1.什么是回调地狱
回调地狱:多个ajax的请求出现了先后的关系,如:
$.get('./json/a.json', function (value1) {
$.get('./json/b.json', function (value2) {
$.get('./json/c.json', function (value3) {
})
})
})
由于ajax是一个异步操作,因为需要将每一个ajax变为同步,保证嵌套的ajax可以使用上一级ajax请求返回值
2.解决回调地狱
es6
利用promise + ajax,将ajax变为同步
function newPromise(url, params = {}) {
return new Promise((resolve, reject) => {
$.get(url, params,function (value) {
resolve(value)
})
})
}
newPromise('./json/a.json')
.then(bkey => {
return newPromise('./json/b.json?bkey'+ bkey)
}).then(ckey =>{
return newPromise('./json/c.json?bkey'+ ckey)
}
).then(msg =>{
console.log(msg)
})
promise的出现其实就是为了解决回调地狱,它是一个管道形式而不是嵌套形式,它是一层一层往下走。
promise利用reslove出去的数据,可以用then接收,reject的数据,用catch接收
es7
function newPromise(url, params = {}) {
return new Promise((resolve, reject) => {
$.get(url, params,function (value) {
resolve(value)
})
})
}
//es7
async function PromiseAjax(){
//解决异步执行,让ajax变为同步
let bkey = await newPromise('./json/a.json')
let ckey = await newPromise('./json/b.json',{bkey})
let cMsg = await newPromise('./json/c.json',{ckey})
}
PromiseAjax();