关于axios同步获取数据的问题

axios同步获取数据

Axios介绍

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

promise是处理异步调用的对象方法

问题

在axios中,调用是异步的,这就会出现需要的数据不能实时获取,导致程序出错。

在写代码时发现了异步调用出现的一些问题

javascript 复制代码
import axios from 'axios'

 function getarticle(){
     return  axios.get('http://localhost:8080/article/getAll')
    .then(result => {return  result.data})
    .catch(err => {console.log(err)})
}

const articleGetAll =  function(){
     let data =  getarticle()
     articlelist.value = data;
};

articleGetAll()
console.log(articlelist)

上面的代码是异步调用的,导致拿到的数据没有解构,还是promise对象,造成了显示上的错误

代码修改

要让代码变成同步的需要使用await(写在调用异步函数的前面, 这个关键字会一直等待返回的结果)。 async关键字和await配套使用,在使用到await的函数声明前要加上async关键字

async函数返回的是一个Promise对象,如果在函数中return一个值,async内部会调用Promise.resolve()帮你封装成一个Promise对象,如果async函数内部抛出错误,内部就会调用Promise.reject()返回Promise对象,在函数的外层不能用await关键字的时候,我们需要用.then()来处理Promise对象

在调用axios的地方加上await关键字,同时在对应函数上加async。但是这样的结果还是不对的,因为async函数返回的值是promise,这样得到的值还是promise对象

既然又变成了一个异步函数,那么就在调用时再套娃一次,加上await

成功显示

成功原因分析

总结

在使用异步变同步的时候,尽量不要使用async的返回值,因为返回值是promise对象
使用时应该在sync函数的内部调用await的地方等待数据解构,结构完成就能得到原始数据,再使用原始数据进行操作

相关推荐
韩立学长3 小时前
【开题答辩实录分享】以《助农信息发布系统设计与实现》为例进行选题答辩实录分享
python·web
chxii4 小时前
IIS 10.0
web
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 天前
HAProxy 自定义错误页面配置指南
运维·负载均衡·web
学海无涯,行者无疆2 天前
前端 Axios 深度封装实战:拦截器 + 文件处理 + 业务接口统一管理
axios·前后端交互·axios使用·axios实战·axios封装·axios详解·axios用法
曲幽2 天前
FastAPI日志实战:从踩坑到优雅配置,让你的应用会“说话”
python·logging·fastapi·web·error·log·info
暴富的Tdy3 天前
【前端开发-循序渐进转向全栈开发】
vue2·web·全栈
码界奇点3 天前
基于WebDAV协议的天翼云盘智能分享管理系统设计与实现
毕业设计·web·go语言·源代码管理
行走的鱼儿3 天前
鸿蒙HarmonyOS随笔
华为·web·harmonyos·arkts·arkdata·dev eco·hmos
曲幽3 天前
FastAPI异步多线程:从踩坑到精通,解锁高性能API的正确姿势
python·flask·fastapi·web·thread·async·httpx·asyncio
曲幽4 天前
FastAPI异常处理全解析:别让你的API在用户面前“裸奔”
python·websocket·api·fastapi·web·exception·error·httexception