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

Categories

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

nuxt.js - How to execute two different Vuex actions sequentially from a component method with async/await

I am saving user data first in Vuex store, and then in database through API call.

export const actions = {
  async userStateUpdate({ commit }, payload) {
    await commit('USER_UPDATE', payload)
  },
  async userDatabaseUpdate({ state }) {
    await this.$axios.post('api/user', {
      user: state.user,
    })
  }
}

I'm calling these two methods this way in my component:

methods: {
  async update(path, value) {
    await this.$store.dispatch('userStateUpdate', { path, value })
      .then(() => {
        console.log('user saved in state')
        this.$store.dispatch('userDatabaseUpdate')
      })
      .then(() => {
        console.log('user saved in database')
      })
      .catch(err) => {
        console.log('user not  saved in store?? or database??')
        console.log(err)
      })
  }
}

Is it a recommended way of using async/await ? How to know in the last catch if the error comes from the first or from the second action ?

question from:https://stackoverflow.com/questions/65935657/how-to-execute-two-different-vuex-actions-sequentially-from-a-component-method-w

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

1 Reply

0 votes
by (71.8m points)

Here's one way you could use just async/await syntax and separate out the error checking with try/catch:

async update(path, value) {
  // Update Vuex
  try {
    await this.$store.dispatch('userStateUpdate', { path, value });
  } catch(err) {
    console.log('error updating store');
    // return;   // You could exit here to avoid a database update on error
  }
  // Update database
  try {
    await this.$store.dispatch('userDatabaseUpdate')
  } catch(err) {
    console.log('error updating database');
  }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...