JS基于ES6新特性async await进行异步处理操作示例

作者:木棉

时间:2026-10-22

浏览:217

本文详解如何利用ES6新增的async和await关键字优化JavaScript异步代码。通过对比传统Promise链式调用与async/await写法,展示如何将复杂的嵌套回调转化为类似同步代码的简洁结构,并包含异常处理的最佳实践建议。

文章目录

async/await异步处理实战

本文通过实例介绍如何利用ES6引入的async和await特性来处理异步操作,供读者参考学习。

在开发中常遇到这样的场景:需要先发起一个Ajax请求,待其返回数据后,再基于该数据发起第二个Ajax请求。如果请求层级较深,会导致代码出现多层嵌套,形成类似回调地狱的结构,难以维护。接下来将演示如何使用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":"沙僧"
    }
  ]
}

传统Promise链式调用

假设我们需要执行两个请求,此处使用axios库,代码实现如下:


function getCode(){
  return axios.get('json/code.json');
}
function getlist(params){
  return axios.get('json/person.json',{params})
}

在第二个请求获取列表时,需要依赖第一个请求返回的code值。只有当code值为0时,才发起后续请求,并将该code作为参数传入。下面先展示常规的实现方式。


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();

查看上述代码的运行结果。

async/await异步处理实战

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();

查看改进后的运行结果。

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框架默认抛出的错误一致,均为黑色字体,不如红色的错误提示醒目。当然,若需对错误进行特定逻辑处理,则应保留try...catch。

执行顺序解析

代码风格是否更加简洁?异步代码现在看起来如同同步代码。下面简要解析这种写法的执行顺序。

在函数声明前添加async关键字,用于标识该函数为异步函数。async必须与await配合使用,例如在第一个请求中。


let code = await getCode();

await关键字的作用是等待getCode()函数执行完毕,获取返回值后将其赋值给变量code,随后再使用code的值执行后续操作。逻辑非常清晰,建议尽快在项目中应用。

更多关于JavaScript的内容,可参考本站相关教程,包括《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》。

希望本文的阐述能对读者的JavaScript程序设计工作提供有益帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章