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 相关文章推荐
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
URL地址中的#符号使用说明
Feb 12 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
webix+springmvc session超时跳转登录页面
Oct 30 Javascript
详解js界面跳转与值传递
Nov 22 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
利用JS响应式修改vue实现页面的input值
Sep 02 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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中MD5函数使用实例代码
2008/06/07 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
DataFrame中去除指定列为空的行方法
2018/04/08 Python
Python装饰器用法实例总结
2018/05/26 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
对pandas处理json数据的方法详解
2019/02/08 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Python pickle模块实现对象序列化
2019/11/22 Python
Python如何输出警告信息
2020/07/30 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
用python计算文件的MD5值
2020/12/23 Python
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
技术人员面试提纲
2013/11/28 职场文书
本科应届生求职信
2014/08/05 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
MySQL中order by的使用详情
2021/11/17 MySQL
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript