JS基于ES6新特性async await进行异步处理操作示例


Posted in Javascript onFebruary 02, 2019

本文实例讲述了JS基于ES6新特性async await进行异步处理操作。分享给大家供大家参考,具体如下:

我们往往在项目中会遇到这样的业务需求,就是首先先进行一个ajax请求,然后再进行下一个ajax请求,而下一个请求需要使用上一个请求得到的数据,请求少了还好说,如果多了,就要一层一层的嵌套,就好像有点callback的写法了,那是相当恶心的,下面我就来讲一下如何使用ES6的新特性async await进行异步处理,使上述情况就好像写同步代码一样,首先我们先举个例子:

先写上json文件:

code.json:

{
  "code":0,
  "msg":"成功"
}

person.json:

{
  "code":0,
  "list":[
    {
      "id":1,
      "name":"唐僧"
    },
    {
      "id":2,
      "name":"孙悟空"
    },
    {
      "id":3,
      "name":"猪八戒"
    },
    {
      "id":4,
      "name":"沙僧"
    }
  ]
}

比如我们有两个请求,如下,这里用的axios:

function getCode(){
  return axios.get('json/code.json');
}
function getlist(params){
  return axios.get('json/person.json',{params})
}

我们第二个请求获取列表的时候需要使用第一个请求得到的code值,只有code值为0时,才能请求,而且当做参数传进去,那么我们看一下常规的做法吧

function getFinal(){
   console.log("我是getFinal函数")
   getCode().then(function(res){
     if(res.data.code == 0){
        console.log(res.data.code);
         var params = {
           code:res.data.code
         }
        getlist(params).then(function(res){
          if(res.data.code == 0){
             console.log(res.data.list);
            }
          })
        }
     })
}
getFinal();

看结果

JS基于ES6新特性async await进行异步处理操作示例

虽然结果出来了,可是这种写法真的挺难受的,下面来一个async await的写法

async function getResult(){
      console.log("我是getResult函数")
      let code = await getCode();
      console.log(code.data.code);
      if(code.data.code == 0){
        var params = {
          code:code.data.code
        }
        let list = await getlist(params);
        console.log(list.data.list);
      }
    }
getResult();

下面看结果

JS基于ES6新特性async await进行异步处理操作示例

当然还剩最后一点,处理异常,可以加上try catch

async function getResult(){
      console.log("我是getResult函数")
      try{
        let code = await getCode();
        console.log(code.data.code);
        if(code.data.code == 0){
          var params = {
            code:code.data.code
          }
          let list = await getlist(params);
          console.log(list.data.list);
        }
      }catch(err){
        console.log(err);
      }
    }
getResult();

个人认为做vue项目的时候,如果对于异常没有特殊处理,可以不加try catch,因为打印出来的错误跟vue自己报的错误是一样的,而且还是黑的字体,不如醒目的红色来的痛快啊!当然如果要对错误进行特殊处理,那么就加上吧

代码风格是不是简便了许多,而且异步代码变成了同步代码,下面我稍微讲一下后者写法的代码执行顺序

首先在 function 前面加 async 用来说明这个函数是一个异步函数,当然,async是要和await配合使用的,第一个请求

let code = await getCode();

await 意思是等一下,等着getCode()这个函数执行完毕,得到值后再赋值给code,然后再用code的值进行下一步操作,就是这么简单!!!赶紧去改代码!!

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
Jun 14 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
20行js代码实现的贪吃蛇小游戏
Jun 20 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 Javascript
如何实现双向绑定mvvm的原理实现
May 28 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 #Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 #Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 #Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 #Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 #Javascript
JS实现数组去重及数组内对象去重功能示例
Feb 02 #Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
Feb 01 #Javascript
You might like
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
Vue中props的详解
2019/05/16 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python中super的用法实例
2015/05/28 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python 图像平移和旋转的实例
2019/01/10 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Django中的静态文件管理过程解析
2019/08/01 Python
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
2014年大学生自我评价
2014/01/19 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
老兵退伍标语
2014/10/07 职场文书
租房协议书范例
2014/10/14 职场文书