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 中对象的继承〔转贴〕
Jan 22 Javascript
Javascript技术技巧大全(五)
Jan 22 Javascript
JavaScript 格式字符串的应用
Mar 29 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
javascript 学习笔记(onchange等)
Nov 14 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
BootStrap表单宽度设置方法
Mar 10 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 jQuery
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
layui 实现表格某一列显示图标
Sep 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
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
Javascript查看大图功能代码实现
2020/05/07 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
python如何设置静态变量
2020/09/07 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
python 实现简易的记事本
2020/11/30 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
UNIX命令速查表
2012/03/10 面试题
教育科研先进个人材料
2014/01/26 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
民事调解书范文
2015/05/20 职场文书
家长会感言
2015/08/01 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL