js中的回调地狱

之前遇见过一个面试题:面试官问我:’有个需求,它需要你调完一个接口后拿这个接口的响应数据去请求一个新的接口,并源源不断得去请求下一个新的接口,那么请问如何解决‘,这个问题就是典型的回调地狱问题

首先,回调地狱是什么?

  • 回调函数的层层嵌套,就叫做回调地狱。回调地狱会造成代码可复用性不强,可阅读性差,可维护性(迭代性差),扩展性差等问题。

  • 回调地狱的原因是,当人们试图以一种从上到下的视觉方式执行JS的方式编写JS,期望第1行发生的任何事情都会在第2行的代码开始运行之前完成,而代码的实际执行则事与愿违。

  • 回调地狱的本质:①嵌套函数存在严重的耦合,牵一发而动全身。②错误处理比较艰难,不能使用try catch 和不能直接return。

解决办法:

使用promise中的then

通过链式调用,来进行实现

但是这样的话也会带来不好的体验:

  • (1)then的链式调⽤也会带来额外的阅读负担,不易读

  • (2)Promise对象一旦新建就会立即执行,无法中途取消

  • (3)若不设置回调函数,Promise内部会抛出错误,不会流到外部

  • (4)当处于pending状态时,无法得知当前处于哪一阶段

async/await:

推荐理由:

  • (1)内置执行器, Generator 函数的执行必须靠执行器,所以才有了 co 函数库,而 async 函数自带执行器,也就是说,async 函数的执行,与普通函数一模一样,只要一行。

  • (2)语义更清晰,与* 和 yield相比,async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果

  • (3)适用性更广,co 函数库约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以跟 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茂茂睡不醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值