AOP的优化

本文探讨了AOP(面向切面编程)在JavaScript中遇到的问题,特别是在处理异步操作时的不足。通过引入async和await,解决了异步执行的问题,确保了loading在请求开始和结束时正确显示。同时,针对传入的对象不便于处理带参数的情况,提出了将actions转换为函数的改进方案,以更灵活地传递参数。
摘要由CSDN通过智能技术生成

接上文
上文我们实现了一个简单的AOP,但是其实还是存在问题的。
问题在哪里?
回到我们最开始的问题。我们希望的是,在我们的请求开始的时候调用loading,在我们请求结束的隐藏loading。我们以前的代码看起来没有问题。但是真的没有问题吗?实际上我们用这份代码做测试的时候我们就会发现问题所在了。因为异步的存在。
这里就不再探讨异步是什么了,我相信你能听懂我再说什么。

// 执行器
function actuator(obj){
  if(obj){
    if(typeof obj === 'function'){
      obj()
    }
    if(obj instanceof Array){
      obj.forEach(fn => {
        if(typeof fn === 'function'){
          fn()
        }
      });
    }
  }
}
function Action(actions){
  return function(){
    try{
      // 执行before
      actuator(actions.before)
      // 执行 service
      actuator(actions.service)
      // 执行after
      actuator(actions.after)
    } catch(err){
      actuator(actions.error)
    }
  }
}

在这个代码里面 我们没有去处理异步的东西。我们首先要做的,就是处理异步。给出解决方案 使用 async跟await

async function actuator (obj) {
  if (obj) {
    if (typeof obj === &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值