首页 > 其他分享 >Vue+Axios的方法异步回调顺序问题

Vue+Axios的方法异步回调顺序问题

时间:2024-03-07 15:22:31浏览次数:23  
标签:异步 Axios watch Vue 异步控制 async 方法

一、问题阐述 有的时候我们需要控制异步函数的执行顺序,比如a方法中如果要用到异步函数b方法的请求结果,就需要进行顺序控制,否则a函数先执行就会导致找不到数据直接报错。 二、方法

1.异步控制

1.1.async,await等做异步控制

1.2修改函数放置位置达到异步控制效果(我遇到的情况无效,但是确实是一个方法)

2.通过Vue watch监视数据变化,从而达到异步控制的效果

3.事件驱动编程。

三、方法示例

1.异步控制

  async mounted() {
     await this.b();
     this.a();
   }

   async b() {
     const response = await axios.get('your-api-url');
     this.someData = response.data;
   }

2.watch

  watch: {     dataOfANeed: {//监视a函数需要的数据       immediate: true,       deep: true,       handler(newV, oldV) {         this.a();       },     },   }, 3.事件驱动编程【未验证,仅作参考】 mounted() {
     this.b();
   },
   methods: {
     async b() {
       const response = await axios.get('your-api-url');
       this.someData = response.data;
       this.$nextTick(() => {
         this.$emit('data-loaded');
       });
     },
     a() {
       this.$on('data-loaded', () => {
         // 在这里可以安全地访问 this.someData,因为它已经被 b 方法异步更新了
       });
     }
   }

四、实例

订单实例中,我们需要设置订单的基础信息(setOrderBasic()),其中包含下单目标的基本信息(queryByPage()),运行中我们通过Vue DevTools等前端开发工具的帮助,完成整个方法执行顺序的控制。

1.赋值时setOrderBasic()由于其内部有值是queryByPage()方法执行完成后才有的,而由于queryByPage()是异步回调,所以要做异步控制

【方法1.2】

但是无用

2.通过直接执行setOrderBasic()方法可以看到

 

除了需要queryByPage的属性均赋值成功,而没有的属性值则为undefined,可见,虽然无值但仍做了赋值操作(undefined)

3.由此改用watch监视lmInfo

【方法2】

当lmInfo有值(发生改变)时,则触发setOrderBasic方法,至此成功

标签:异步,Axios,watch,Vue,异步控制,async,方法
From: https://www.cnblogs.com/JulyPB/p/18059009/pbbk

相关文章

  • vue_居中左对齐
    div中文本居中对齐后,然后再左对齐如下效果:===============================22345645=================2345678987654============12========================================= <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8......
  • Vue调试神器vue-devtools配置 / 解决提示 Download the Vue Devtools extension for a
    访问Vue页面,控制台提示:    ......
  • vue2项目中不能直接在store中声明响应式变量,vue3项目中能在store中直接声明响应式变量
    vue2项目中不能直接在store中声明响应式变量,vue3项目中能在store中直接声明响应式变量,页面元素也会响应式生效在Vue2项目中,store中的状态默认情况下是不具备响应式的特性的。这是因为Vue2.x使用的是基于对象定义的Vue.observable()来创建响应式对象,而store中的状态是通......
  • Vue学习笔记37--内置关系
    示例一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>一个重要的内置关系</title>......
  • vue使用超图openlayers调用mapv实现蜂窝图
    在用超图openlayer开发的时候遇到问题,在此作为记录。文字描述不对的地方请多担待, 下载依赖,npmimapv 按需引入,因为官网例子是普通的html引入,{mapv}引入方式调用的是超图@supermap中的方法。DataSet是mapv的方法 import{Mapv} from'@supermap/iclient-ol/overla......
  • 通过debug搞清楚.vue文件怎么变成.js文件
    前言我们每天写的vue代码都是写在vue文件中,但是浏览器却只认识html、css、js等文件类型。所以这个时候就需要一个工具将vue文件转换为浏览器能够认识的js文件,想必你第一时间就想到了webpack或者vite。但是webpack和vite本身是没有能力处理vue文件的,其实实际背后生效的是vue-loade......
  • 前端学习-vue视频学习007-标签的ref属性
    尚硅谷视频教程给标签增加ref属性,可以通过属性值取到标签内容<template><divclass="person"><h1>this</h1><h2ref="title">that</h2><button@click="showLog">changeTemp</button>......
  • Vue学习笔记36--VueComponent构造函数
    VueComponent构造函数<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>VueComponent&......
  • Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助开始之前CompositionAPI 可以说是Vue3的最大特点,那么为什么要推出CompositionApi,解决了什么问题?通常使用Vue2开发的项目,普遍会存在以下问题:代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺点T......
  • Vue学习笔记3--组件嵌套
    组件嵌套示例一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>非单文件组件--全局注册</tit......