Как я могу обработать ошибку чтобы далее использовать ее в popup?

Мне нужно обработать ошибку так, чтобы в дальнейшем я смог ее использовать для показа пользователю. Нужно передать параметры в store.js в котором уже есть мутация setMessage Я хочу вызвать через dispatch в который передать параметры моей ошибки. В консоле ошибка

Uncaught (in promise) TypeError: dispatch is not a function
    at _callee$ (auth.js?5317:51)
    at tryCatch (runtime.js?96cf:63)
    at Generator.invoke [as _invoke] (runtime.js?96cf:293)
    at Generator.eval [as throw] (runtime.js?96cf:118)
    at asyncGeneratorStep (asyncToGenerator.js?1da1:3)
    at _throw (asyncToGenerator.js?1da1:29)

auth.js

import firebase from "firebase";
import {error} from '@/components/utils/error.js';
import { root } from "postcss";

function setUserToState(context, responce) {
  const user = {
    email: responce.user.email,
    verified: responce.user.emailVerified,
    id: responce.user.uid,
  };

  context.commit("setUser", user);
  window.localStorage.setItem("user", JSON.stringify(user));
}

/* const TOKEN_KEY = "jwt-token"
const USER =  */

export default {
  namespaced: true,
  state() {
    return {
      token: null,
      user: null,
    };
  },

  mutations: {
    setUser(state, user) {
      state.user = user;
    },
    setToken(state, token) {
      state.token = token;
      localStorage.setItem("jwt-token", token);
    },
    loguot(state) {
      state.token = null;
      (state.user = null), localStorage.removeItem(this.token, this.user);
    },
  },
  actions: {
    async login(context, payload, dispatch) {
      try {
        const responce = await firebase
        .auth()
        .signInWithEmailAndPassword(payload.email, payload.password);
      setUserToState(context, responce);

      console.log("responce", responce);
      } catch (error) {
        dispatch('setMessage',{
          value: error.message,
          type: 'danger'
        }, {root: true})
        console.log('ERROR' ,error);
        throw error.message
      }

    },

    async createUser(context, { email, password }) {
      try {
        const responce = await firebase
          .auth()
          .createUserWithEmailAndPassword(email, password);
        setUserToState(context, responce);

        /*              setUserToState(context, responce); */
      } catch (error) {
        throw error.message;
      }
    },

    async signOut(context) {
      try {
        await firebase.auth().signOut();
        context.commit("setUser", null);
        localStorage.removeItem("user");
      } catch (error) {
        throw error.message;
      }
    },
  },

  getters: {
    token(state) {
      return state.token;
    },
    isAuthenticated(_, getters) {
      // Пропускаем первый и берем 2 параметр
      return !!getters.user;
    },
  },
};

Как мне передать параметры в мутацию?


Ответы (1 шт):

Автор решения: yar85

Первый параметр (context) можно деструктурировать, получив метод commit:

someAction({ commit }, actionParameter) {
  // ...
  try {
    // ...
  } catch (error) {
    commit('setMessage', error.message || 'Неизвестная ошибка');
    // ...
  }
},

Обычно так и делается.


Либо, можно использовать обычную нотацию обращения к свойству объекта:

someAction(сontext, actionParameter) {
  // ...
  try {
    // ...
  } catch (error) {
    context.commit('setMessage', error.message || 'Неизвестная ошибка');
    // ...
  }
},

// В мутацию можно передавать пэйлоадом не только сообщение из объекта ошибки, как в примере - вместо этого, можно и сам объект ошибки передать (тот, что прилетает в параметром в catch). Это уж вопрос предпочтений.

→ Ссылка