前言
回调地狱就是函数作为参数层层嵌套,多用于ajax请求
在使用js是,为了实现某些逻辑经常会写出层层嵌套的回调函数
如果嵌套太多,就会影响到代码可读性和逻辑,这种情况就是会调地狱
一个异步请求嵌套另一个异步请求 ,另一个异步请求依赖于另一个的执行结果, 使用回调的方式相互嵌套,他会造成我们的代码可读性非常差 后期不好维护
地狱回调例子
ajax(url, () => {
// 逻辑代码
ajax(url, () => {
// 逻辑代码
ajax(url, () => {
// 逻辑代码
})
})
})
解决方案
async / await
// async / await
function all(arg, val) {
return new Promise((resolve, reject) => {
// 使用定时器模仿异步操作
setTimeout(() => {
resolve(arg + val)
}, 1000)
})
}
async function render() {
let a = await all('start,', '1,')
let b = await all(a, '2,')
let c = await all(b, '3,over')
console.log(c); // start,1,2,3,over
}
render()
Promise.then() 链式调用
// promise.then() 的链式调用
function all(arg1, arg2) {
return new Promise((resolve, reject) => {
setTimeout(() => {
var result = arg1 + arg2
resolve(result)
}, 1000)
})
}
all('start,', '1,').then(function (res) {
return all(res, '2,')
}).then(res => {
return all(res, '3,')
}).then(res => {
console.log(res + 'over')
})