Как дождаться завершения нескольких мутаций graphql, а затем вызвать другую функцию

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

arrayOfObjects.forEach((object) => {
  someGraphQlMutation({
    variables: object.id,
  });
});

-----------------

const [someGraphQlMutation] = useMutation(
    SOME_GRAPHQL_MUTATION,
    {
        onCompleted: (data) => {
            // callback
        }
    }
);

Однако после того, как все мутации сделаны, мне нужно вызвать другую функцию. Мне нужно дождаться завершения итерационных мутаций, прежде чем вызывать функцию обратного вызова. Могу ли я использовать Promise.all в этом контексте?


person catandmouse    schedule 17.07.2020    source источник
comment
Технически вы можете просто создать одну мутацию со всеми необходимыми запросами, но useMutation звучит как hook, так что нет, вы не можете использовать Promise.all в этом случае.   -  person goto1    schedule 17.07.2020


Ответы (1)


Да, вы можете использовать Promise.all для ожидания всех мутаций:

const [someGraphQlMutation] = useMutation(SOME_GRAPHQL_MUTATION);
const doEverything = async () => {
  try {
    const results = await Promise.all(arrayOfObjects.map(object => {
      return someGraphQlMutation({ variables: object.id });
    }));
    // results will be an array of execution result objects (i.e. { data, error })
    // Do whatever here with the results
  } catch (e) {
    // Handle any errors as appropriate
  }
}
person Daniel Rearden    schedule 17.07.2020
comment
Я не верю, что это работает, someGraphQlMutation не возвращает обещание - person Batman; 24.07.2021