当前位置: 首页 > news >正文

【新手指南】async/await与Axios的用法

代码

async function getList() {try {const res = await axios.get("https://q6zv39.laf.run/get_list");console.log(res.data); // 通常只需输出实际数据return res.data;       // 返回数据以便后续使用} catch (error) {console.error("请求失败:", error);}
}

前言

如果你是编程新手,看到像asyncawait这样的关键词,再加上axios这个陌生的函数,可能会感到困惑甚至抓狂!别担心,今天我们从零开始,详细讲解这些概念,弄清楚为什么需要在函数前加async,为什么await要跟在axios前面,以及为什么函数里可以嵌套axios。即使你是纯小白,这篇文章也会让你彻底搞懂这些“啥玩意”,并能在JavaScript开发中轻松上手。

什么是async和await?

async是啥?

async是JavaScript中一个关键字,用来定义一个异步函数。异步函数的意思是:这个函数不会阻塞代码的执行,而是允许在后台处理任务,等到任务完成再返回结果。打个比方,想象你在点外卖:你点了餐(启动任务),然后可以干别的事(不阻塞),等外卖送到(任务完成)再处理。

在代码中,加了async的函数总是返回一个Promise(一种表示未来会完成的操作的对象)。比如:

async function sayHello() {return "Hello";
}
console.log(sayHello()); // 输出:Promise { 'Hello' }

await是啥?

await是另一个关键字,只能用在async函数内部。它的作用是暂停代码执行,等待一个Promise的结果。继续外卖的例子,await就像你在等外卖送到,送到后再继续吃(处理结果)。

比如:

async function sayHello() {let result = await Promise.resolve("Hello");console.log(result); // 输出:Hello
}
sayHello();

await让代码看起来像同步执行,但实际上是异步处理的,背后依赖Promise机制。

为什么需要async和await?

在JavaScript中,很多操作(如网络请求、文件读取)是异步的。传统的回调函数或Promise链式调用容易让代码变得复杂(俗称“回调地狱”)。async/await是ES2017引入的语法糖,简化了异步编程,让代码更直观、更易读。

Axios是什么?

axios是一个非常流行的JavaScript库,用于发送HTTP请求(比如从服务器获取数据)。它返回一个Promise,所以特别适合和async/await搭配使用。在你的代码中:

const res = await axios({url: "https://q6zv39.laf.run/get_list",method: "GET"
});

这里,axios发送了一个GET请求到指定的URL,await等待请求完成,返回结果存储在res中。res通常包含服务器的响应数据,比如状态码和返回的JSON。

为什么axios前面要写await?

axios发送请求是异步操作,需要时间等待服务器响应。如果不加await,代码会立即继续执行,res可能还是未定义的值。加上await,程序会暂停,等待请求完成后再取到res中的数据。这样才能正确处理服务器返回的结果。

举个例子:

async function getList() {const res = axios({url: "https://q6zv39.laf.run/get_list",method: "GET"});console.log(res); // 可能输出未完成的状态
}

如果不加awaitres是一个Promise对象,而不是实际数据。改成:

async function getList() {const res = await axios({url: "https://q6zv39.laf.run/get_list",method: "GET"});console.log(res); // 得到真正的响应数据
}

这样,await确保了res是请求完成后的结果。

为什么外层函数要写async?

await只能在async函数内部使用。如果外层函数没有async,JavaScript会报错,因为await需要一个异步上下文。外层函数加async,告诉JavaScript这是一个异步操作的容器,允许内部使用await

试想一下:如果你不加async,直接写:

function getList() {const res = await axios({url: "https://q6zv39.laf.run/get_list",method: "GET"});console.log(res);
}

会报错:await is only valid in async function。加了async后,代码就合法了。

为什么函数里可以嵌套axios?

“嵌套”这个词可能让你误解了。实际上,代码里的axios不是嵌套在函数里,而是函数内部调用的一个操作。getList函数定义了一个逻辑步骤:使用axios发送请求。函数里可以调用任何合法的JavaScript代码或库函数,包括axios,因为这是JavaScript的灵活性。

嵌套的真正意思可能是多个axios调用,比如:

async function getData() {const res1 = await axios({ url: "url1", method: "GET" });const res2 = await axios({ url: "url2", method: "GET" });console.log(res1, res2);
}

这里,axios调用是顺序执行的,不是嵌套结构(嵌套通常指函数或对象层层包含)。函数内部可以包含任意逻辑,只要语法正确。

实际运行流程

让我们一步步看getList函数怎么工作:

  1. 定义async function getList(),告诉JavaScript这是异步函数。
  2. await axios(...)发送GET请求到https://q6zv39.laf.run/get_list,等待服务器响应。
  3. 响应回来后,res得到数据(比如JSON列表)。
  4. console.log(res)打印结果,可能是{ data: [...], status: 200 }

整个过程是非阻塞的,程序不会卡住,可以同时处理其他任务。

总结

  • async 定义异步函数,配合Promise使用。
  • await 暂停执行,等待Promise结果,简化异步代码。
  • axios 是HTTP请求工具,返回Promise,适合await
  • 外层必须用async,因为await依赖它。
  • 函数里调用axios是正常操作,不是嵌套,体现了JavaScript的模块化设计。

掌握这些,你就能写出调用API的代码了!建议你用Node.js环境安装axiosnpm install axios),然后试试这段代码。遇到问题,欢迎评论交流!

(本文基于JavaScript异步编程基础,适合初学者实践。)


文章转载自:

http://qqCvWEjh.gLcgy.cn
http://EIihysBC.gLcgy.cn
http://8lvIDFbF.gLcgy.cn
http://LSNhuvL7.gLcgy.cn
http://jaD3YY99.gLcgy.cn
http://PLCgbtIN.gLcgy.cn
http://rbI7IQdw.gLcgy.cn
http://Wdq0TMMz.gLcgy.cn
http://YApKLq58.gLcgy.cn
http://cIqGxNwf.gLcgy.cn
http://yo2pIKJp.gLcgy.cn
http://S0IwPTYL.gLcgy.cn
http://XzZN91eR.gLcgy.cn
http://UO87uFIe.gLcgy.cn
http://hUpKktbb.gLcgy.cn
http://oqixoNER.gLcgy.cn
http://WoiuCVpl.gLcgy.cn
http://j7Tir0PT.gLcgy.cn
http://yC1GtWbS.gLcgy.cn
http://L9sbMeCf.gLcgy.cn
http://euEQDmON.gLcgy.cn
http://ZrewalnU.gLcgy.cn
http://HWm2Hrsi.gLcgy.cn
http://iaPKeDN3.gLcgy.cn
http://kfndgx6r.gLcgy.cn
http://pb5chQhE.gLcgy.cn
http://LLkboLuv.gLcgy.cn
http://VgCdy2LT.gLcgy.cn
http://T9te16Fe.gLcgy.cn
http://eIB57JMS.gLcgy.cn
http://www.dtcms.com/a/384637.html

相关文章:

  • Java的并发编程1
  • 使用prometheus operator监控部署在k8s集群外的mysql实例
  • Notepad++ 8.7 64位安装教程(附安装包)​
  • 《大数据之路1》笔记3:数据管理
  • 【代码随想录day 27】 力扣 376. 摆动序列
  • 使用conda导出虚拟环境
  • LeetCode热题100--105. 从前序与中序遍历序列构造二叉树--中等
  • 计算机网络---数据链路层上
  • 《FastAPI零基础入门与进阶实战》第18篇:Token验证改善--CRUD中应用
  • QT(4)
  • DevOps历程--Drone安装使用详细教程
  • 微信小程序选择图片、视频、音频
  • 【C++上岸】C++常见面试题目--网络篇(第二十三期)
  • mapbox进阶,使用jsts实现平角缓冲区
  • A股大盘数据-20250915分析
  • MySQL服务启动全平台指南:从Windows服务、Linux systemctl到macOS的完整攻略
  • 八、vue3后台项目系列——封装layout页面下切换组件Appmain
  • 学习React-12-useEffect
  • MFC_Button
  • [K8S学习笔记]YAML相关
  • 贪心算法在物联网能耗优化中的应用
  • 使用paddlepaddle-Gpu库时的一个小bug!
  • 从 Linux 到 Kubernetes:操作系统的演变与云原生未来
  • Java网络编程:(socket API编程:TCP协议的 socket API -- 服务器端处理请求的三个步骤)
  • 新能源汽车总装车间案例:四台S7-1200通过无线网桥同步控制16组ET 200SP的秘诀
  • k8s事件驱动运维利器 shell operator
  • GitHub Actions 部署配置
  • java后端工程师进修ing(研一版‖day45)
  • k8s核心资料基本操作
  • Redis 在电商系统中的应用:高并发场景下的架构艺术