沐鳴登錄_有了 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