У меня есть преобразователь для моего локального состояния:
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 }))
})
Проблема, с которой я сталкиваюсь, заключается в том, что обещание решается слишком быстро, и поэтому локальное состояние не обновляется во времени.Я справился с этим, добавив задержку в секунду, чтобы он наверстал упущенное.
Но есть ли лучший способ?