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实现自定义标签
May 08 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
jQuery的bind()方法使用详解
Jul 15 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
jquery之别踩白块游戏的简单实现
Jul 25 Javascript
Vue form 表单提交+ajax异步请求+分页效果
Apr 22 Javascript
AngularJS实现select的ng-options功能示例
Jul 12 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
JavaScript 生成唯一ID的几种方式
Feb 19 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常用字符串处理函数实例分析
2014/11/22 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
PHP 类与构造函数解析
2017/02/06 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
浅析JS运动
2015/12/28 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
法人身份证明书
2015/06/18 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB