Как я могу обработать ошибку чтобы далее использовать ее в 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 шт):
Первый параметр (context) можно деструктурировать, получив метод commit:
someAction({ commit }, actionParameter) {
// ...
try {
// ...
} catch (error) {
commit('setMessage', error.message || 'Неизвестная ошибка');
// ...
}
},
Обычно так и делается.
Либо, можно использовать обычную нотацию обращения к свойству объекта:
someAction(сontext, actionParameter) {
// ...
try {
// ...
} catch (error) {
context.commit('setMessage', error.message || 'Неизвестная ошибка');
// ...
}
},
// В мутацию можно передавать пэйлоадом не только сообщение из объекта ошибки, как в примере - вместо этого, можно и сам объект ошибки передать (тот, что прилетает в параметром в catch). Это уж вопрос предпочтений.