1: 調(diào)用方式更加靈活
舊的: 必須在啟動異步調(diào)用之前指定
promise: 啟動Promise => 返回Promise對象 => 給promise對象綁定對調(diào)函數(shù)
2: 支持鏈?zhǔn)秸{(diào)用一喘,避免調(diào)用地獄
回調(diào)地獄: 回調(diào)函數(shù)嵌套使用香椎,外部函數(shù)異步執(zhí)行返回的結(jié)果是內(nèi)部函數(shù)執(zhí)行的條件
回調(diào)地獄的缺點(diǎn): 不便于閱讀,不便于異常處理
終極解決方案: async await
回調(diào)地獄
doSomething((result) => {
doSecondFunc (result, (newResult) => {
doThirdFunc (newResult, (finalResult) => {
console.log('回調(diào)地獄', finalResult)
},failureCallback)
},failureCallback)
}, failureCallback)
Promise 鏈?zhǔn)秸{(diào)用
doSomething()
.then(r => doSecondFunc(r))
.then(newResult => doThirdFunc(newResult))
.then(finalResult => {
console.log(finalResult)
}).catch(failureCallback)
async await 是終極解決回調(diào)函地獄的方法
async function request () {
try {
const result = await doSomething();
const newResult = await doSecondFunc();
const finalResult = await doThirdFunc();
console.log(finalResult)
} catch (err) {
failureCallback(err)
}
}