沐鳴登錄_有了 Promise 和 then,為什麼還要使用 async?
最近代碼寫着寫着,我突然意識到一個問題——我們既然已經有了 Promise 和 then,為啥還需要 async 和 await?這不是脫褲子放屁嗎?
比如說我們需要一段請求服務器的代碼:
new Promise((resolve, reject) => {
setTimeout(() => {
const res = '明月幾時有'
if (1 > 2) {
resolve(res)
} else {
reject('我不知道,把酒問青天吧')
}
}, 1500)
}).then(
(res) => {
console.log(`成功啦!結果是${res}`)
},
(err) => {
console.log(`失敗了。。。錯誤是${err}`)
}
)
這段代碼,簡潔漂亮,但是如果用上了 async 和 await,就需要寫成下面這樣:
function ask() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const res = '明月幾時有'
if (1 > 2) {
resolve(res)
} else {
reject('我不知道,把酒問青天吧')
}
}, 1500)
})
}
async function test() {
try {
const res = await ask()
} catch (err) {
console.log(err)
}
}
test()
竟然還需要一個 try catch 來捕捉錯誤!越寫越像 Java 呀。
MDN 給我們了一些解釋:
如果你在代碼中使用了異步函數,就會發現它的語法和結構會更像是標準的同步函數。
說白了,這種寫法的一部分原因,就是為了“討好” Java 和其他的一些程序員。
另一方面呢,也是增強可讀性,雖然說 async await 的寫法比較丑,但是毫無疑問,可讀性遠遠高於 Promise then。
最為重要的呢,是 Promise 可以無限嵌套,而 async await 只能處理一個 Promise,無法繼續嵌套。
所以一旦需要使用多次連續回調,async await 就乏力了。
其實也可以,通過 await 一個Promise.all()來實現。
作者:幾乎一米八的徐某某
出處:Aero Blog (https://www.cnblogs.com/xhyccc/)
站長推薦
1.雲服務推薦: 國內主流雲服務商,各類雲產品的最新活動,優惠券領取。地址:阿里雲騰訊雲華為雲
2.廣告聯盟: 整理了目前主流的廣告聯盟平台,如果你有流量,可以作為參考選擇適合你的平台點擊進入
鏈接: http://www.fly63.com/article/detial/9049