1: 调用方式更加灵活
旧的: 必须在启动异步调用之前指定
promise: 启动Promise => 返回Promise对象 => 给promise对象绑定对调函数
2: 支持链式调用,避免调用地狱
回调地狱: 回调函数嵌套使用,外部函数异步执行返回的结果是内部函数执行的条件
回调地狱的缺点: 不便于阅读,不便于异常处理
终极解决方案: async await
回调地狱
doSomething((result) => {
doSecondFunc (result, (newResult) => {
doThirdFunc (newResult, (finalResult) => {
console.log('回调地狱', finalResult)
},failureCallback)
},failureCallback)
}, failureCallback)
Promise 链式调用
doSomething()
.then(r => doSecondFunc(r))
.then(newResult => doThirdFunc(newResult))
.then(finalResult => {
console.log(finalResult)
}).catch(failureCallback)
async await 是终极解决回调函地狱的方法
async function request () {
try {
const result = await doSomething();
const newResult = await doSecondFunc();
const finalResult = await doThirdFunc();
console.log(finalResult)
} catch (err) {
failureCallback(err)
}
}