vue中,子组件的$emit如何按顺序执行父组件的异步方法

目前情况是这样的,用的vant组件,打算二次封装list,思路是父组件通过异步取data,子组件每次下拉刷新,触发onload方法,onload里emit父组件的异步方法,得到最新的data。我想咨询的是,如何等父组件的方法执行完,拿到data数据后,再执行子组件emit方法之后的方法,子组件代码片段如下。


```javascript
        this.$emit('loadData')
        if (this.total === this.tableData.length) {
          this.finished = true
        }

```

那可以试试Promise

// 子组件
function A () {
  // 同步拿到父组件最新的dataList
  const dataList = await this.$emit('loadData')
  if (this.total === this.tableData.length) {
     this.finished = true
  }
}

// 父组件
function loadData () {
  return new Promise((resolve)=>{
    // 异步请求获取到dataList
    ....
    resolve(dataList)
  })
}

设置一下 watch 侦听器 或者computed计算属性,当某个数据变更的时候执行你对应的方法,即可

  1. 子组件中的方法,拆分成两个
function A:
this.$emit('loadData')

function B:
if (this.total === this.tableData.length) {
   this.finished = true
}

子组件刷新,执行A(),A()会触发执行父组件loadData()方法,在loadData()方法执行完成后,主动调用子组件B():
this.$refs[’xx'].B()