Vue flushCallbacks报错解决方式----小记

问题描述

  //根据过渡期合同号获得合同基本信息+政策
  getAndSetPolicies(param) {
  	//根据过渡期合同号查询后端
	this.$api.getPeriodContractInfo(param).then(res => {
	  //为查到的合同基本信息赋值---假设为方法A
	  this.setBaseInfoByPeriodContractNum(res.response)  
	  //为政策赋值----假设为方法B
	  this.$emit("transientContractChange", this.responseFormPeriodContract);
  } 

  测试发现上面的代码如果去掉方法A,方法B可以获得正确的结果,但是方法A和方法B都存在的情况下,方法B会失效,打断点发现在运行到下面的方法(此方法应是Vue封装的方法)时,方法B被赋上的数据会被清空---->具体原因我不知道.但是想到既然只有方法B时,方法B可以获得正确的结果,于是想着可以把方法A和方法B隔开来执行
在这里插入图片描述

解决方式1

基于以上的思考,试着写了下面的代码,发现果然可行,这里记为解决方式1

  getAndSetPolicies(param) {
	this.$api.getPeriodContractInfo(param).then(res => {
	  //为查到的合同基本信息赋值---假设为方法A
	  this.setBaseInfoByPeriodContractNum(res.response)
	}).finally(() => {
	  //为政策赋值----假设为方法B
	  this.$emit("transientContractChange", this.responseFormPeriodContract);
	})
  }

解决方式2

回顾上面思考与解决问题的过程,其实不难发现上面的问题其实可以归纳为下面的问题:

  • 前端如何确保方法B一定在方法A执行完再执行

2.1Promise

具体原理不深究,这里做了一个小demo,演示一下如何使用Promise来解决该问题

 methodA() {
	console.log("我是AAAA")
	return Promise.resolve("ok"); //方法A执行完,.then()可以调到的内容
  },
  methodB() {
	console.log("我是BBB")
  },

  /**展示公司选择框*/
  methodC() {
	this.methodA().then((res) => {
	  console.log(res)
	  if (res === "ok") {
		this.methodB();
	  }
	})
  },

代码如上,当调用methodC时,会先调用methodA,当then()里接收到methodA调用完成的标志"ok"时才会执行methodB

2.2展示一下结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值