Javascript 如何在GraphQL中进行异步查询?

Javascript 如何在GraphQL中进行异步查询?,javascript,reactjs,graphql,apollo,Javascript,Reactjs,Graphql,Apollo,我打电话1查询和变异。变异工作正常,但当我从查询中得到响应时,我需要将用户重定向到另一个页面,但在我的情况下,该函数在我得到响应之前被触发。我怎样才能防止这种情况 const renderData = async () => { const currentUserId = await data?.signInUserSession?.idToken ?.payload?.sub; const i

我打电话1查询和变异。变异工作正常,但当我从查询中得到响应时,我需要将用户重定向到另一个页面,但在我的情况下,该函数在我得到响应之前被触发。我怎样才能防止这种情况

          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);
    }
  };