promise和async/await的区别

promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象

async函数总是返回一个promise对象。就算一个异步函数的返回值表面上不是一个承诺(promise), 只要它在async 函数中,它的本质也会是一个承诺(promise)。

awiat 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function。
必须放在async里面使用

async/await为什么会更好一点

  1. 使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码

  2. 错误处理方面在这里插入图片描述
    在这里插入图片描述
    通过这两个图不难看出,若是在promise的.then中出现错误的话,外层的trycatch代码块是捕获不到错误的,所以就需要再加一层.catch,才能捕获到.then里面的报错,但是这样会显得代码有点冗余。而假如写成注释的async/await的格式,一个try/catch可以同时对同步以及异步进行错误处理,代码更加简洁。

  3. async/await能够使得代码调试更简单。2个理由使得调试Promise变得非常痛苦:

    • 不能在返回表达式的箭头函数中设置断点
    • 如果你在.then代码块中设置断点,使用StepOver快捷键,调试器不会跳到下一个.then,因为它只会跳过异步代码。
      使用await/async时,你不再需要那么多箭头函数,这样你就可以像调试同步代码一样跳过await语句。
  4. 假如要使用返回值的话在这里插入图片描述你很可能遇到过这样的场景,调用promise1,使用promise1返回的结果去调用promise2,然后使用两者的结果去调用promise3。这样也不如async/await更为直观

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值