我有一个针对我所在州的解析器:
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;
},
},
};
此解析器调用另一个突变,该突变在rails服务器上对我的graphql ruby进行服务器端调用。
在我的组件中,我使用以下命令进行调用:
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 }))
})
我遇到的问题是,诺言解决得太快了,因此本地状态没有及时更新。我通过增加一秒的延迟来解决这个问题。
但是,还有更好的方法吗?