Vuex-модуль-декоратор, изменяющий состояние внутри действия - PullRequest
0 голосов
/ 10 января 2019

Использование vuex-module-decorator У меня есть действие authenticate, которое должно изменить состояние.

@Action
public authenticate(email: string, password: string): Promise<Principal> {
    this.principal = null;
    return authenticator
      .authenticate(email, password)
      .then(auth => {
          const principal = new Principal(auth.username);
          this.context.commit('setPrincipal', principal);
          return principal;
      })
      .catch(error => {
          this.context.commit('setError', error);
          return error;
      });
}

// mutations for error and principal

Но это не так со следующим сообщением:

Необработанное отклонение обещания Ошибка: "ERR_ACTION_ACCESS_UNDEFINED: Вы пытаетесь получить доступ к this.someMutation () или this.someGetter внутри @Action? Это работает только в динамических модулях. Если не динамический, используйте this.context.commit ("mutationName", payload) и this.context.getters ["getterName"]

Что я не понимаю, так это то, что он хорошо работает с @MutationAction и async. Однако я скучаю по типу возврата Promise<Principal>.

@MutationAction
public async authenticate(email: string, password: string) {
    this.principal = null;
    try {
        const auth = await authenticator.authenticate(email, password);
        return { principal: new Principal(auth.username), error: null };
    } catch (ex) {
        const error = ex as Error;
        return { principal: null, error };
    }
}

-

В настоящее время я чувствую себя заблокированным и хотел бы получить некоторую помощь для реализации @Action, который может изменять состояние и возвращать определенный тип в Promise.

...