飞道的博客

既然有了 Promise 和 then,为什么还要使用 async呢?

375人阅读  评论(0)

在这模拟一个向服务发起请求的例子


  
  1. new Promise( (resolve, reject) => {
  2. setTimeout( () => {
  3. const res = '这是反馈的信息'
  4. if ( 1 > 2) {
  5. resolve(res)
  6. } else {
  7. reject( '其他的信息')
  8. }
  9. }, 1000)
  10. }).then(
  11. (res) => {
  12. console.log( `sucesss:${res}`)
  13. },
  14. (err) => {
  15. console.log( `error:${err}`)
  16. }
  17. )

当我们用上了 async 和 await,就需要写成下面这样:


  
  1. function asyncDemo() {
  2. return new Promise( (resolve, reject) => {
  3. setTimeout( () => {
  4. const res = '这是反馈的信息'
  5. if ( 1 > 2) {
  6. resolve(res)
  7. } else {
  8. reject( '其他的信息')
  9. }
  10. }, 1000)
  11. })
  12. }
  13. async function demo() {
  14. try {
  15. const res = await asyncDemo()
  16. } catch (err) {
  17. console.log(err)
  18. }
  19. }
  20. demo()

在这里 加上了 try... catch..,是不是 觉得更繁琐了呢,MDN给出了他的解释:

如果你在代码中使用了异步函数,就会发现它的语法和结构会更像是标准的同步函数。

说白了,这种写法的一部分原因,就是为了“讨好” Java 和其他的一些程序员。

另一方面呢,也是增强可读性,虽然说 async await 的写法比较丑,但是毫无疑问,可读性远远高于 Promise then。

最为重要的呢,是 Promise 可以无限嵌套,而 async await 只能处理一个 Promise,无法继续嵌套。

所以一旦需要使用多次连续回调,async await 就乏力了。

其实也可以,通过 await 一个Promise.all()来实现。


转载:https://blog.csdn.net/weixin_43844696/article/details/106467500
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场