当前位置:   article > 正文

解决由于方法异步导致数据丢失问题_异步复位丢失数据

异步复位丢失数据
export default {
  name: "",
  data() {
    return{
      ticketId: '', // 订单编号
    }
  },
  mounted() {
    this.orderInfo()
    this.createQRCode()
  },
  methods: {
    //  显示订单信息——订单编号
    orderInfo() {
          let params = {
          xxx: this.xxxx
        }
          post('xxx', params).then((res) => {
          console.log(res.data)
          // 请求成功
          if (res.data.code === 20000) {
               this.ticketId = res.data.data.ticket.ticketId
               console.log(this.ticketId)
           }
        })
      })
    },
   createQRCode() {
          console.log(this.ticketId) // undefined
      })
    }
  }
}

分析:

orderInfo() 和 createQRCode()方法均为异步,即在methods中定义方法、在mounted中加载,在进入页面的时候两个方法都是直接调用,程序并不能判断两个方法谁先调用谁先发生。因此,从orderInfo()中通过接口获取的参数,无法在createQRCode()方法中再次获取。

在设定的逻辑流程中,希望orderInfo()方法先执行,在orderInfo()方法中获取的参数ticketId,可以专递給createQRCode()方法,供其使用。并且,两个方法均在页面打开时调用。

解决方法:

为实现orderInfo()先进行,完毕后,createQRCode()方法再加载,可以参考使用await/async来处理异步问题

代码实现:

  1. orderInfo() {
  2. return new Promise((resolve, reject) => {
  3. let params = { xxx: this.xxxx }
  4. post('xxx', params).then((res) => {
  5. resolve(this.data.data.ticket)
  6. })
  7. })
  8. },
  9. async createQRCode() {
  10. let ticketId = await this.orderInfo()
  11. // console.log(ticketId )
  12. }

至此,在createQRCode()方法中成功获得了ticketId参数!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/828765
推荐阅读
相关标签
  

闽ICP备14008679号