Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
541 views
in Technique[技术] by (71.8m points)

vue子组件调用父组件方法,如何保证按照顺序执行(promise写的好像有问题)

子组件
`

 save() {
    this.$refs.form.validate((valid) => {
      if (valid) {
        this.$axios
          .post(`/api/wordInfo/updateData.json`, data)
          .then((res) => {
            if (res.success) {
              this.getNature();   
this.$emit("getPassage", this.passageId);
              this.$emit("getSelectText", res.result);
              this.$emit("getMeaning", res.result.word);
              this.$emit("getWord", res.result);
            } else {
              this.$message.error(res.message);
            }
          });
      }
    });
  },

`

子组件的save方法完毕之后 要连续调用三个父组件的方法 由于 getPassage getSelectText getWord getMeaning 这四个方法都是 axios请求,并且需要严格按照顺序执行,切第一个执行完毕之后 第二个执行 第二个执行完毕之后 第三个执行 ...... 不然会影响到页面

开始改成了promise 但是 报错$emit undefined 感觉应该用promise实现 但是写起来好像有问题 求教各位


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

层层嵌套有点麻烦,你可以这样来做:

// 子组件
...
表单提交成功后:
this.$emit('on-success', {
    passageId: this.passageId,
    result: res.result
})
...


// 父组件
<Child @on-success="handleFormSuccess" />

...
async handleFormSuccess(params) {
    try {
        const passage = await "getPassage" 的请求
        const selectText = await "getSelectText" 的请求
        const meaning = await "getMeaning" 的请求
        const word = await "getWord" 的请求
        
        // 做请求后的逻辑
    } catch (error) {
        // 错误提示
    }
}
...

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...