2017-07-07 3 views
2

J'ai un serveur graphql et j'essaye de déclencher un événement chaque fois que le statut d'une entité est mis à jour. J'ai une mutation pour mettre à jour l'entité, qui utilise graphql-subscriptions pour publier la mise à jour pour l'abonné à écouter. Cependant, pubsub.subscribe(EVENT_NAME) a détecté la modification, mais lorsque je l'intègre dans le résolveur d'abonnement, il ne déclenche pas la mise à jour.L'abonnement Apollo ne fonctionne pas

J'ai modifié des parties du code qui ne sont pas pertinentes par souci de concision.

Mon résolveur:

Mutation: { 
    updateStatus(_, { id, status, hash }) { 
    return repository.updateStatus(id, status, hash); 
    } 
}, 
Subscription: { 
    updatedStatus: { 
    subscribe:() => pubsub.asyncIterator('updatedStatus'), 
    } 
}, 

Mon dépôt:

export const updateStatus = async function(id: String, status: String, hash: String) { 
    try { 
    const res = await fetch(`${baseURL}/article/${id}/status?publish_hash=${hash}`, { 
     headers, 
     method: 'PATCH', 
     body: JSON.stringify({ status }) 
    }); 

    const article = await fetchSingleArticle(id, 'XML', headers.channel, false); 

    await pubsub.publish('updatedStatus', article); 
    return article; 
    } catch (e) { 
    console.log(e.message); 
    } 
} 

Mon schéma:

type Mutation { 
    updateStatus(id: ID!, status: PublishingStatus = PUBLISHING, hash: String): Article 
} 

type Subscription { 
    updatedStatus(id: ID!): Article 
} 

schema { 
    query: Query 
    mutation: Mutation 
    subscription: Subscription 
} 

Pour tester cela, je suis juste en utilisant graphiql, qui capte la connexion websocket bien.

J'ai essayé de publier en utilisant à la fois article (comme illustré) et { updatedStatus: article }, aucun des deux ne semble être détecté.

Comme mentionné précédemment pubsub.subscribe('updatedStatus') prend le changement. Le problème semble donc lié au résolveur d'abonnement.

Je vais au large des documents suivants: http://dev.apollodata.com/tools/graphql-subscriptions/setup.html#setup

Répondre

0

se trouve que j'utilisais un jour de package graphql! La mise à jour vers la dernière version a résolu ce problème.