Обещание в Аполлоне местной государственной мутации - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть преобразователь для моего локального состояния:

export const resolvers = {
  Mutation: {
    login: (_, { email, password }, { cache }) => {
      const query = gql`
        query GetAdmin {
          admin @client {
            __typename
            isLoggedIn
          }
        }
      `
      const previousState = cache.readQuery({ query })
      let updatedData;
      client.mutate({
        variables: {
          email,
          password,
        },
        mutation: SIGN_IN,
      }).then(({ data }) => {
        updatedData = {
          ...previousState,
          admin: {
            ...previousState.admin,
            isLoggedIn: true,
          },
        }
        cache.writeData({ query, data: updatedData })
        localStorage.setItem('email', data.signInAdmin.email);
        localStorage.setItem('token', data.signInAdmin.authenticationToken);
      });

      return null;
    },
  },
};

Этот распознаватель вызывает другую мутацию, которая выполняет вызов на стороне сервера моему графу ruq на сервере rails.

В моемкомпонент, я вызываю это с помощью следующего:

client.mutate({
      variables: {
        email: this.refs.email.value,
        password: this.refs.password.value,
      },
      mutation: LOGIN_ADMIN,
    }).then(() => new Promise((resolve) => setTimeout(resolve, 600)))
      .then(() => {
        console.log(client.readQuery({ query: IS_LOGGED_IN }))
      })

Проблема, с которой я сталкиваюсь, заключается в том, что обещание решается слишком быстро, и поэтому локальное состояние не обновляется во времени.Я справился с этим, добавив задержку в секунду, чтобы он наверстал упущенное.

Но есть ли лучший способ?

...