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 相关文章推荐
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
ThinkJS中如何使用MongoDB的CURD操作
Dec 13 Javascript
实例解析Array和String方法
Dec 14 Javascript
微信小程序下拉刷新界面的实现
Sep 28 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
Oct 15 Javascript
vue中axios封装使用的完整教程
Mar 03 Vue.js
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动态生成虚拟现实VRML网页
2006/10/09 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
loading动画特效小结
2017/01/22 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
Node.js简单入门前传
2017/08/21 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
python通过shutil实现快速文件复制的方法
2015/03/14 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
自我鉴定范文
2013/11/10 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
教师工作表现自我评价
2015/03/05 职场文书
尼克胡哲观后感
2015/06/08 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
Python Matplotlib绘制动画的代码详解
2022/05/30 Python