Nuxt-ожидание после асинхронного действия (this.$store. dispatch)


Nuxt-ожидание после асинхронного действия (this.$store. dispatch)

09.09.2020 10:34:16 Просмотров 1 Источник

Я новичок в Nuxt и столкнулся с проблемой, которую не понимаю.

Если я закодирую что-то вроде:

const resp1 = await this.$axios.$post('urlCall1', {...dataCall1});
this.$axios.$post('urlCall2', {...dataCall2, resp1.id});

В resp1.id правильно установлен во 2-м вызове axios => мы ждем завершения первого вызова, прежде чем делать 2-й.

Однако, когда я определяю действия asyn в моем магазине vuex ex:

  async action1({ commit, dispatch }, data) {
    try {
      const respData1 = await this.$axios.$post('urlCall1', { ...data });
      commit('MY_MUTATION1', respData1);
      return respData1;
    } catch (e) {
      dispatch('reset');
    }
  },
  async action2({ commit, dispatch }, data, id) {
    try {
      const respData2 = await this.$axios.$post('urlCall2', { ...data });
      commit('MY_MUTATION2', respData2);
    } catch (e) {
      dispatch('reset');
    }
  }

а затем в моем компоненте vue я запускаю такие действия, как:

const resp1 = await this.$store.dispatch('store1/action1', data1);
this.$store.dispatch('store2/action2', data2, resp1.id);

resp1.идентификатор неопределенным в действий2.

Я также пытался управлять обещанием "по-старому":

this.$store.dispatch('store1/action1', data1).then(resp1 => this.$store.dispatch('store2/action2', data2, resp1.id))

Результат все тот же => id = undefined в action2

Не могли бы вы, ребята, сказать мне, где я ошибаюсь ?

Заранее спасибо.

Последнее примечание: эти 2 действия находятся в разных магазинах

У вопроса есть решение - Посмотреть?

Ответы - Nuxt-ожидание после асинхронного действия (this.$store. dispatch) / Nuxt - Wait after async action (this.$store.dispatch)

Является ответом!
parker_codes

09.09.2020 11:09:22

Vuex не допускает нескольких аргументов, поэтому вы должны передать его как объект, чтобы он выглядел так:

this.$store.dispatch('store2/action2', { ...data2, id: resp1.id });

А потом в магазине:

async action2({ commit, dispatch }, { id, ...data }) {
    try {
      const respData2 = await this.$axios.$post('urlCall2', { ...data });
      commit('MY_MUTATION2', respData2);
    } catch (e) {
      dispatch('reset');
    }
}
Помочь в развитии проекта:
Закрыть X