Возвращение 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