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之更有效率的字符串替换
Aug 02 Javascript
Javascript学习笔记1 数据类型
Jan 11 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
Apr 25 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
在vue项目中使用sass语法问题
Jul 18 Javascript
js实现带有动画的返回顶部
Aug 09 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 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
第三节 定义一个类 [3]
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
javascript中的window.location.search方法简介
2013/09/02 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
python实现发送邮件功能
2017/07/22 Python
Python实现句子翻译功能
2017/11/14 Python
python hook监听事件详解
2018/10/25 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
大学校园活动策划书
2014/02/04 职场文书
迎新晚会主持词
2014/03/24 职场文书
语文教育专业求职信
2014/06/28 职场文书
2014年个人年终总结
2015/03/09 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript