vue中异步数据获取方式(确保数据被获取)
作者:二水你要努力啊 发布时间:2024-05-09 15:23:07
标签:vue,异步,数据
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


猜你喜欢
- 代码如下:td=date() '此次为设置当前日期,主要是为了调试方便,实际应用中可以使用当天日期.. str=
- 在本节描述的示例代码,提供真实的例子来示范在 FileSystemObject 对象模式中可用的许多功能。该代码显示了如何一起使用对象模式的
- 本文通过实例解析了 SQL Server 数据库扩展存储过程,实现远程备份与恢复的方法和步骤实例说明: 环境:win2k+sqlserver
- 在防止sql注入这些细节出现问题的一般是那些大意的程序员或者是新手程序员,他们由于没有对用户提交过来的数据进行一些必要的过滤,从而导致了给大
- 标题:按某字段合并字符串之一(简单合并)描述:将如下形式的数据按id字段合并value字段。id val
- Python3实现旋转数组的3种算法下面是Python3实现的旋转数组的3种算法。一、题目给定一个数组,将数组中的元素向右移动 k 个位置,
- 本文实例讲述了Python基于递归和非递归算法求两个数最大公约数、最小公倍数。分享给大家供大家参考,具体如下:最大公约数和最小公倍数的概念大
- 本文实例讲述了Python设计模式之观察者模式。分享给大家供大家参考,具体如下:观察者模式是一个软件设计模式,一个主题对象包涵一系列依赖他的
- Multiplexer根据URL将请求路由给指定的Handler。Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求
- 今天学习CI框架过程中遇到个问题: A PHP Error was encountered Severity: Notice Message
- 1、类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?class test(object): &nb
- 问题你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列解决方案最简单的过滤序列元素的方法就是使用列表推导。比如:>>
- 1. 进入mysql/bin目录下输入mysqladmin processlist; 2. 启动mysql,输入show processli
- 开发过程中,我们经常会遇到代码回滚的情况。正常人都知道,git 回滚有两大宝:git revertgit reset当我们在本地开发,还未
- **一 tf.concat( ) 函数–合并**In [2]: a = tf.ones([4,35,8]) &n
- 本文从树数据结构说到二叉堆数据结构,再使用二叉堆的有序性对无序数列排序。1. 树树是最基本的数据结构,可以用树映射现实世界中一对多的群体关系
- SymPy是符号数学的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展#coding:utf-8&
- 路由路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组
- Logo是品牌图形区别的点睛之处,我们每天都要接触很多logo - 在高速公路上,在购买商品时,以及浏览各种网站。我们查看很多logo设计,
- 使用Tensorflow进行深度学习训练的时候,需要对训练好的网络模型和各种参数进行保存,以便在此基础上继续训练或者使用。介绍这方面的博客有