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处理数据(同步,异步)问题简单记录

情况介绍

vue中异步数据获取方式(确保数据被获取)

后端返回该地址的坐标经纬度,需要前端用百度地图api处理成详情地址

处理过程在遍历中直接引入

vue中异步数据获取方式(确保数据被获取)

处理完数据后返回并绑定到el-table列表

通过打印发现getLocation()方法响应过慢,导致数据渲染时该字段为空

最终解决方法:new Promise()

抽离出处理数据的方法,用异步处理方式返回

vue中异步数据获取方式(确保数据被获取)

返回的之中存在空值。。。

所以。。。。。在外层调用时同样需要异步操作

vue中异步数据获取方式(确保数据被获取)

因为获取详情地址的方法是逐条处理的,所以在调用的外层进行了遍历

。。。。。。。。最终解决问题

来源: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
  • asp之家 网络编程 m.aspxhome.com