Возвращение Promise от mutateAndGetPayload

Я пытаюсь вернуть обещание от mutateAndGetPayload функция mutationWithClientMutationId, но я не могу получить ответ. Запрос остается в ожидании, пока не истечет время ожидания.

Пример кода:

mutateAndGetPayload: ({clientMutationId, ...args}) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Resolved")
        }, 500)
    })
}, ...

Просматривая исходный код и схему тестирования, можно вернуть Promise, поэтому я должен что-то делать не так. Любое руководство здесь?

РЕДАКТИРОВАТЬ: Оказывается, обещание решается просто отлично, есть некоторая проблема с другой частью моего кода. Хотя на самом деле не могу найти никаких хороших следов того, где это находится.

1 ответ

Решение

Ожидается, что возвращаемое значение mutateAndGetPayload это объект, чьи ключи соответствуют настроенным outputFields мутации. Кроме того, полезная нагрузка должна содержать clientMutationId чтобы клиентская сторона могла соотнести ответ с соответствующей транзакцией мутации на стороне клиента.

import {mutationWithClientMutationId} from 'graphql-relay-js';
const myMutation = mutationWithClientMutationId({
  /*...*/
  outputFields: {
    foo: {type: GraphQLString, resolve: (payload) => payload.fooString},
  },
  mutateAndGetPayload() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        const payload = {fooString: 'Resolved'};
        resolve(payload);
      }, 500);
    });
  },
});

В приведенном выше примере используется mutationWithClientMutationId помощник из graphql-relay-js автоматически добавить clientMutationId к исходящей полезной нагрузке, а также правильные типы вывода и ввода. Посмотрите, как это происходит здесь: https://github.com/graphql/graphql-relay-js/blob/master/src/mutation/mutation.js

Другие вопросы по тегам