參考鏈接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
//async函數(shù) 一定返回一個promise對象雇盖、 awiat修飾async放在函數(shù)里面
// promise對象
// resolve可以將異步數(shù)據(jù)傳遞出來
let p = new Promise((resolve) => {
resolve('hello word')
})
// 通過 then 拿到異步數(shù)據(jù)
p.then((data) => {
console.log(data)
})
// 回調(diào)函數(shù):函數(shù)作為參數(shù)、被函數(shù)內(nèi)部調(diào)用
function getTea(fn) {
setTimeout(() => {
fn('奶茶')
},500)
}
function getHotPot(fn) {
setTimeout(() => {
fn('火鍋')
},1000)
}
// 需求:先吃火鍋栖忠、再喝奶茶崔挖、(假如再來一些其他的需求反復(fù)嵌套、會造成回調(diào)地獄庵寞,不利于維護(hù))
getHotPot((data) => {
console.log(data)
getTea((data) => {
console.log(data);
});
})
解決回調(diào)地獄方法:
// 解決辦法1:new Promise()對象狸相、用.then方法解決
function getTea() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('喝奶茶')
}, 1000)
})
}
function getHotPot() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('吃火鍋')
},2000)
})
}
getHotPot().then((data) => {
console.log(data)
return getTea()
}).then((data) => {
console.log(data)
})
// 解決方法2:async函數(shù)(推薦使用)
async function getData() {
// (await 后面加上一個 promise對象) 就可以直接獲取resolve傳遞出來的異步數(shù)據(jù)
let hotPot = await getHotPot()
console.log(hotPot)
let tea = await getTea()
console.log(tea)
}
getData()