2015-12-23 3 views
1

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

Некоторые примеры кода:

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

Глядя через исходный код и тестовой схемы должно быть можно вернуть обещание, так что я должен делать что-то неправильно. Какие-нибудь рекомендации здесь?

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

ответ

3

Ожидается, что возвращаемое значение 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

+0

Это решило проблему. Я правильно настроил метод разрешения своих полей вывода, и он просто сработал. Благодаря! – JonasFromell

Смежные вопросы