vue中异步数据获取方式(确保数据被获取)
作者:二水你要努力啊 时间:2024-05-09 15:23:07
vue中异步数据获取
1、获取异步数据,通过async/await限制
import { fetchList } from '@/api/article'
//在created中即开始获取
created() {
? ? this.getList()
}
methods:{
?? ?async getList() {
? ? ? this.listLoading = true
? ? ??
? ? ? //ES6写法,与then方法链式调用相同,但比较简洁直观
? ? ? //const的写法,保证原数据不被更改
? ? ? const { data } = await fetchList(this.listQuery)
? ? ??
? ? ? //被await阻塞的代码
? ? ? const items = data.items
? ? ? this.list = items.map(v => {
? ? ? })
? ? ? this.listLoading = false
? ? },
}
eg1:
?? ?changeA(){
? ? ? return ?3
? ? },
? ? async getAsync(){
? ? ? let a = 1
? ? ? a = await this.changeA()
? ? ? console.log(a) ? //打印结果为3
? ? },
? ? //changeA中没有异步操作,程序从上往下执行
eg2:
? ? async changeA(){
? ? ?let a ?=22
? ? ?await ?setTimeout(()=>{
? ? ? ?console.log('异步中')
? ? ? ?a = 33
? ? ?})
? ? ?console.log('异步结果')
? ? ?return a
? ? },
? ? async getAsync(){
? ? ? let a = 1
? ? ? await this.changeA()
? ? ? console.log(a) ?
? ? },
? ? ?//打印结果为?
? ? ?异步结果
? ? ?22 ? ? ? ? ? ? //a的结果
? ? ?异步中
? ? ?//结论await并未阻塞异步的代码
eg3:
?? ?changeA(){
? ? ? return new Promise((resolve)=>{
? ? ? ? setTimeout(()=>{
? ? ? ? ? console.log('异步')
? ? ? ? ? resolve()
? ? ? ? },2000)
? ? ? })
? ? },
? ? async getAsync(){
? ? ? await this.changeA()
? ? ? console.log('同步') ??
? ? },
? ? //两秒后打印结果?
? ? 异步
? ? 同步
? ? //结论:成功阻塞代码
eg4:
?? ?changeA(){
? ? ? return new Promise((resolve)=>{
? ? ? ? setTimeout(()=>{
? ? ? ? ? console.log('异步')
? ? ? ? ? resolve()
? ? ? ? },2000)
? ? ? })
? ? },
? ? async getAsync(){
? ? ? this.changeA()
? ? ? console.log('同步') ??
? ? },
? ? //先打印同步,两秒后打印异步
总结:当await后面跟的函数存在异步且返回promise的时候,才会阻塞之后的同步代码,由上述eg可以印证
tips:
async函数也会立即返回一个promise对象
2、将一个方法的返回值
返回promise函数,可以在该方法结束后,使用链式结构
methods:{
?? ? getProfile(id) {
?? ? ? ? ?let query = {
?? ? ? ? ? ?aid: id
?? ? ? ? ?};
?? ? ? ? ?//返回一个promise对象
?? ? ? ? ?return new Promise(async resolve => {
?? ? ? ? ? ?? ? ?const {data} = await api.getProfileList(query)
?? ? ? ? ? ?? ? ?//被await阻塞的同步代码
?? ? ? ? ? ? ?this.profileList = data;
?? ? ? ? ? ? ?this.graphical(this.dataX, this.dataY);
?? ? ? ? ? ? ?resolve();
?? ? ? ? ?});
?? ? ? ?},
?//当得到赋值的时候,再打开弹窗
? ? ? ? this.getProfile(aid).then(() => {
? ? ? ? ? this.dialogVisible3 = true;
? ? ? ? });
}
vue处理数据(同步,异步)问题简单记录
情况介绍
后端返回该地址的坐标经纬度,需要前端用百度地图api处理成详情地址
处理过程在遍历中直接引入
处理完数据后返回并绑定到el-table列表
通过打印发现getLocation()方法响应过慢,导致数据渲染时该字段为空
最终解决方法:new Promise()
抽离出处理数据的方法,用异步处理方式返回
返回的之中存在空值。。。
所以。。。。。在外层调用时同样需要异步操作
因为获取详情地址的方法是逐条处理的,所以在调用的外层进行了遍历
。。。。。。。。最终解决问题
来源:https://blog.csdn.net/qq_33601443/article/details/101208740
标签:vue,异步,数据
0
投稿
猜你喜欢
golang 并发编程之生产者消费者详解
2024-04-28 10:49:32
实例讲解python函数式编程
2022-10-30 22:14:35
Python技能树共建之python urllib 模块
2023-02-07 04:02:40
Bootstrap轮播插件简单使用方法介绍
2024-04-27 15:19:06
numpy实现RNN原理实现
2023-09-21 23:47:33
Python实现打印九九乘法表的不同方法总结
2023-05-25 01:05:19
Scratch3.0二次开发之windows环境下打包成exe的流程
2022-12-31 03:27:34
Eclipse + Python 的安装与配置流程
2021-07-25 06:34:18
一篇文章弄懂MySQL查询语句的执行过程
2024-01-23 20:26:05
如何在pycharm中配置pyqt5设计GUI操作教程
2021-09-28 17:42:21
GoLang函数栈的使用详细讲解
2024-03-16 21:06:21
python通过函数名调用函数的几种方法总结
2021-03-22 03:40:35
基于pycharm实现批量修改变量名
2022-01-23 05:46:21
python3的pip路径在哪
2023-01-27 14:15:39
Pyhhon之Pygame的Font文本和字体
2021-08-14 13:00:33
JavaScript Try...Catch 声明的 使用方法
2024-04-18 10:52:21
关于Python-pip安装失败问题及解决
2021-03-13 05:07:41
MySQL 中查找含有目标字段的表的方法
2024-01-12 16:45:20
Django实现全文检索的方法(支持中文)
2023-12-04 14:35:13
Python接口自动化之文件上传/下载接口详解
2022-01-02 17:32:28