• async和await应用步骤分析+优化异常处理


    项目里经常遇到优化代码情况,例如回调地狱

    1、现在比较流行的解决这个问题的方法是使用 Promise,可以将嵌套的回调函数展平。但是写代码和阅读依然有额外的负担。
    2、另外一个方案是使用 ES6 中新增的 generator,因为 generator 的本质是可以将一个函数执行暂停,并保存上下文,再次调用时恢复当时的状态。co 模块是个不错的封装。
      但是这样略微有些滥用 generator 特性的感觉。
    3、ES7 中有了更加标准的解决方案,新增了 async/await 两个关键词。async 可以声明一个异步函数,此函数需要返回一个 Promise 对象。await 可以等待一个 Promise 对象 resolve,并拿到结果。

    所以本节我们介绍下ES7的async/await使用步骤

    (1)Promise回调函数

       react或者vue项目都会封装axios请求,如下所示

      

      然后定义请求模块

      

      最后引入模块并调用Promise语法

      

      这里我们针对Promise的回调写法做下优化

    (2)步骤分析

      1、首先我们想获取返回结果,所以使用await等待执行完毕返回,如下所示

      

      2、await需要配合async使用,即async需要放在await所在函数体的左侧,如下所示

      

      3、接着我们需要针对错误情况做处理,需要结合try...catch

      

      优化完毕

    (3)小结

      

    (4)优化Axios请求2:

      目前为止,每一次的axios请求都需要进行try...catch的处理,所以我们接下来统一处理请求异常操作,即统一处理try...catch操作

      

      接下来需要在api/ajax.js里统一处理请求异常,方案:在封装axios的外部包裹一个自定义的Promise对象,在请求出错时不调用reject,而是直接显示错误提示

      

      此时组件里便不用再用try...catch进行异常处理,如下所示

      

      错误情况测试如下:

      

      测试结果如下

      

    (5)Axios优化3

      目前为止,我们发现每次请求完成都需要通过

    const result = response.data

      来获取结果,如下所示

      

      写法较为繁琐,所以这里做下优化直接获取结果就是result,修改api/ajax.js
      

      直接返回reponse.data即可

      

       最后直接获取result

      

      

    .

  • 相关阅读:
    重要在CentOS7系统安装与卸载RabbitMQ
    springboot日志配置XML配置文件获取APPLICATION.YML配置文件的内容
    bootstrap model弹出框的使用
    android 10 各种包的结构
    android studio 报错 External file changes sync may be slow: The current inotify(7) watch limit is too low.
    解决Netbeans 中 no ** in java.library.path 的问题
    ShardingSphere 4.0.0 RC1 版本个人心得
    EF Core报错“Format of the initialization string does not conform to specification starting at index 0.”
    Python3和Python2区别
    电商web端测试总结
  • 原文地址:https://www.cnblogs.com/jianxian/p/12575120.html
Copyright © 2020-2023  润新知