GraphQL: средство поиска полей не выполняет запрос подписки? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть запрос на подписку MessageFolder_Subscription, который выглядит следующим образом:

QUERY

const MESSAGEFOLDER_SUBSCRIPTION_QUERY = gql`
    subscription ($localUserID: String!){
        MessageFolder_Subscription(userID: $localUserID){
            id
            remoteUserData{
                id
                name_title
                name_first
                name_last
                [...more fields...]
            }
        },
    }
`;

Вот схема для него:

SCHEMA

type myUserData {
    id: String
    gender: String
    name_title: String
    name_first: String
    *[...more fields...]*
}

type messageFolder{
    id: String
    remoteUserData: myUserData
}

type Subscription {
    MessageFolder_Subscription(userID: String!): messageFolder
}

Вот как я делаю резольверы:

RESOLVERS

const resolvers = {
    //FIELD RESOLVER
        MessageFolder_Subscription: {
            subscribe: withFilter(
                () => pubsub.asyncIterator(MSGFOLDER_ADDED_CHANNEL),
                (payload, args) => {
                    debugger; <=== NEVER FIRES

                    if (typeof (payload) === 'undefined') {
                        return false;
                    }

                    let result = false;
                    const userId = Meteor.userId();
                     // let messageFolder = MessageFolder_Subscription.messageFolder; 
                    result = (userId === args.fromID || args === MSGFOLDERargs.toID);
                    return result;
                }
            )
        },
    //ROOT RESOLVER
        *[......more resolvers here.....]*
    Subscription: {
        MessageFolder_Subscription: {
            subscribe: withFilter(
                () => pubsub.asyncIterator(MSGFOLDER_ADDED_CHANNEL),
                (payload, args) => {
                    debugger;

                    if (typeof (payload) === 'undefined') {
                        return false;
                    }

                    let result = false;
                    const userId = Meteor.userId();
                     // let messageFolder = MessageFolder_Subscription.messageFolder; 
                    result = (userId === args.fromID || args === MSGFOLDERargs.toID);
                    return result;
                }
            )
        }
}

Когда я изменяю связанный элемент, pubsub запускает запрос MessageFolder_Subscription, как и ожидалось.Прослеживая, я вижу, что он возвращает true.

Но по какой-то причине преобразователь поля для поля remoteUserData на MessageFolder_Subscription никогда не срабатывает.

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 марта 2019

решаемая. Мне пришлось добавить поле __typename::

const messageFolder_Subscription = {
    __typename: 'messageFolder_Subscription',
    id: userID,
}

... к объекту подписки MessageFolder_Subscription, когда он был создан в преобразователе мутаций, перед передачей в pubsub.

...