Javascript 如何在GraphQL中进行异步查询?
我打电话1查询和变异。变异工作正常,但当我从查询中得到响应时,我需要将用户重定向到另一个页面,但在我的情况下,该函数在我得到响应之前被触发。我怎样才能防止这种情况Javascript 如何在GraphQL中进行异步查询?,javascript,reactjs,graphql,apollo,Javascript,Reactjs,Graphql,Apollo,我打电话1查询和变异。变异工作正常,但当我从查询中得到响应时,我需要将用户重定向到另一个页面,但在我的情况下,该函数在我得到响应之前被触发。我怎样才能防止这种情况 const renderData = async () => { const currentUserId = await data?.signInUserSession?.idToken ?.payload?.sub; const i
const renderData = async () => {
const currentUserId = await data?.signInUserSession?.idToken
?.payload?.sub;
const isAdmin = await data?.signInUserSession?.idToken?.payload[
"custom:role"
];
localStorage.setItem("userId", currentUserId);
if (
currentUserId !== null &&
currentUserId !== undefined &&
currentUserId !== ""
) {
Auth.currentSession().then((data) => {
setData({
variables: {
updateUserInput: {
id: currentUserId,
firstName: data.getIdToken().payload.given_name,
lastName: data.getIdToken().payload.family_name,
},
},
});
});
isCodeValid({
variables: {
validateUserVerificationCodeInput: {
user: {
id: currentUserId,
},
},
},
});
if (isAdmin === "admin" && isUserCodeValid) {
history.push("/managements");
} else if (
isUserCodeValid !== undefined &&
isUserCodeValid === true
) {
history.push("/verification");
} else if (isUserCodeValid) {
history.push("/stripe");
}
}
};
useMutation为此类情况提供了onCompleted和refetchQueries选项。很难为您的案例编写精确的解决方案,因为并非所有代码都可见,但我相信下面的示例会有所帮助:
const [addProduct, { data, loading, error }] = useMutation(
createProductMutation
);
const onFinish = async (fieldNames) => {
await addSpending({
variables: { ...others, ...fieldNames},
refetchQueries: [{ query: calledQuery }],
onCompleted: (data) => {
// your logic
},
});
if (!error) {
form.resetFields();
onFinishSave(true);
}
};
const [addProduct, { data, loading, error }] = useMutation(
createProductMutation
);
const onFinish = async (fieldNames) => {
await addSpending({
variables: { ...others, ...fieldNames},
refetchQueries: [{ query: calledQuery }],
onCompleted: (data) => {
// your logic
},
});
if (!error) {
form.resetFields();
onFinishSave(true);
}
};