首页 > 其他分享 >Vue 中请求同步执行解决方案

Vue 中请求同步执行解决方案

时间:2023-08-21 13:55:06浏览次数:40  
标签:同步 form 解决方案 表单 Vue getDealStageListInfo res response id

有很多小伙伴在使用Vue的时候都会遇到一种情况,form表单修改回显时,某个下拉框里的内容回显乱码,这是因为Vue是的请求方法是异步请求:简单来说,form表单内容先获取了出来,而项目阶段的下拉框随后才获取出来

// 表单
<el-col :span="12">
  <el-form-item :label="$t('项目阶段')" prop="dealStage">
    <el-select v-model="form.dealStage" :placeholder="$t('自动回显')" filterable>
      <el-option v-for="item in dealStageOptions" :key="item.id" :label="item.nodeName" :value="item.id" />
    </el-select>
  </el-form-item>
</el-col>
// data 数据
data () {
  return { 
    dealStageOptions: [],  // 项目阶段下拉数据
    form: {} ,// 表单数据
  }
},
// 初始化方法
init(id) {
  // 获取项目阶段下拉数据(dealStageOptions),
  // getDealStageListInfo方法的请求时间可能比获取表单基本信息的请求时间长,不能在表单数据获取之前获取出来。(getDealStageListInfo方法的响应时间比getFormInfo方法的响应时间久)
  this.getDealStageListInfo()
  this.getFormInfo(id) // 获取表单基本信息数据(form)
},
// 获取节点下拉数据方法
getDealStageListInfo () {
  getNodeListByDealType().then(res => {
    if (res.code === 200) {
      this.dealStageOptions = res.rows
    }
  })
},
// 获取表单数据方法
getFormInfo(id) {
  getDealBase(id).then( response => {
    if(response.code === 200) {
      this.form = response.data
    }
  })
},

 

解决该问题的出现有几种方法:

1. async 和 await 关键字是ES6语法提供的,用于同步调用

// 初始化表单数据方法 , 使用async 和 await 关键字保证该方法体内容能按顺序执行
async init(id) {
  await this.getDealStageListInfo()
  await this.getFormInfo(id)
},
// 获取节点下拉数据方法
getDealStageListInfo () {
  getNodeListByDealType().then(res => {
    if (res.code === 200) {
      this.dealStageOptions = res.rows
    }
  })
},
// 获取表单数据方法
getFormInfo(id) {
  getDealBase(id).then( response => {
    if(response.code === 200) {
      this.form = response.data
    }
  })
},

 

2. 当项目阶段的下拉框数据请求完成后再请求form表单数据(也就是吧form表单的请求嵌套到下拉框请求结果后请求) (不推荐)

这种方式并不是最好的方式,因为当返回参数 res.code 不等于200时,会导致form表单获取不到数据。

init(id) {
  getDealStageListInfo (id) {
    getNodeListByDealType().then(res => {
      if (res.code === 200) {
        this.dealStageOptions = res.rows
        getDealBase(id).then( response => {
          this.form = response.data
        })
      }
    })
  }
},

标签:同步,form,解决方案,表单,Vue,getDealStageListInfo,res,response,id
From: https://www.cnblogs.com/ayuaichiyu/p/17645813.html

相关文章

  • Web 国际化:新增越南语语系(vue i18n)
     前提:1.在src/locales文件夹中,新增vi.json文件背景:1.vue步骤:1.在main.js中,importVueI18nfrom'vue-i18n'Vue.use(VueI18n)consti18n=newVueI18n({locale:localStorage.getItem('lang')||'zh',messages:{ .........
  • Vue的组件data为什么必须是一个函数?
    vue中的data必须是函数是为了保证组件的独立性和可复用性。实例是通过构造函数来创建的,每个构造函数可以new多个实例,每个实例都会继承原型上的方法和属性,在vue中,一个vue组件就是一个vue实例,当一个组件被复用多次,就会创建多个实例。如果data是对象,那么被多次复用的这个组件,在某......
  • Vue Router
    什么是路由路由就是URL地址,地址不同,则显示的页面内容不同,路由分为前端路由和后端路由,Vue属于前端框架,因此我们讲解的路由也是前端路由。Vue是单页面应用程序,通过hash(#)来实现不同页面之间的切换。什么是单页面应用程序?通俗地讲就是不需要刷新页面,所有组件都在一个页面上的应用......
  • ETL之apache hop数据增量同步功能
    ETL增量数据抽取CDC概念:ChangeDataCapture,变化的数据捕获,也称:【增量数据抽取】(名词解释)CDC是一种实现数据的增量抽取解决方案,是实现【ETL整体解决方案】中的一项子方案/子问题。(对CDC的定位)如何捕获变化的数据是增量抽取的关键,对捕获方法一般有2点要求:准确性:能够将业务系......
  • Vue 项目性能优化实践
    Vue已经成为前端必备利器了,Vue首页加载速度慢是很常见的问题,dist文件的体积差不多都在10m左右,解决方式也有很多,最简单的方式增加服务器的配置性能,当然在预算有限的情况下,如果通过优化来提升速度呢。比如在一台普通配置服务器上,差不多加载速度在15s左右,那是没办法接受的,不管是用......
  • vue通讯的几种方式
    1.props和$emit。父组件向子组件传递数据是通过props传递的,子组件传递给父组件是通过$emit触发事件来做到的。2. 父组件中通过provide来提供变量,然后在子组件中通过inject来注入变量。3.$refs获取组件实例。4.envetBus兄弟组件数据传递,这种情况下可以使用事件总线的方......
  • PON测试,“信”助力 | 信而泰测试解决方案浅析
    PON介绍一、什么是PON网络PON是“PassiveOpticalNetwork”的缩写,是一种基于光纤的网络技术。PON网络通过单向的光信号传输来实现数据、语音和视频等信息的传输。PON网络可以支持多个传输速率和距离要求,因此广泛应用于FTTH、FTTB(FibertotheBuilding)和FTTP(FibertothePremi......
  • PON测试,“信”助力 | 信而泰测试解决方案浅析
    PON介绍一、什么是PON网络PON是“PassiveOpticalNetwork”的缩写,是一种基于光纤的网络技术。PON网络通过单向的光信号传输来实现数据、语音和视频等信息的传输。PON网络可以支持多个传输速率和距离要求,因此广泛应用于FTTH、FTTB(FibertotheBuilding)和FTTP(FibertothePremises......
  • 使用VuePress打造的LearnData知识库帮助我更好地学习和传播 - 从笔记到分享
    在当今快节奏的社会中,技术变化日新月异。作为一名技术博客站长,我深切感受到了学习和传播知识的重要性。为了更好地满足读者的需求,我决定采用VuePress搭建一个功能强大且易于维护的知识库平台,名为LearnData。本文将介绍我如何利用VuePress构建LearnData,并展示一些相关的代码示例。......
  • Vue 3 Deep Dive with Evan You
    什么是DOM?如果我们把这个HTML加载到浏览器中,浏览器创建这些节点,用来显示网页。所以这个HTML映射到一系列DOM节点,然后我们可以使用JavaScript进行操作。例如:letitem=document.getElementByTagName('h1')[0]item.textContent="NewHeading"VDOM网页可以有很多DOM节点,......