0

Ich benutze einen Express-Server mit GraphQL-Subskriptionen und Subscriptions-Transport-ws.GraphQL-Subskriptionen: Wie man veröffentlichte Objekte in Subskriptions-Resolver

Ich habe das Abonnement mit einem bestimmten Kanal einzurichten:

... 
 

 
const subscriptionManager = new SubscriptionManager({ 
 
    schema: executableSchema, 
 
    pubsub: pubsub, 
 
    setupFunctions: { 
 
    testRunChanged: (options, args) => { 
 
     return { 
 
     testRunChangedChannel: { 
 
      filter: (testRun) => { 
 
      return testRun.id === args.testRunId; 
 
      } 
 
     }, 
 
     }; 
 
    }, 
 
    }, 
 
}); 
 

 
...

Nach einer Mutation ein Prozess gestartet wird auf dem Server empfangen wird, in dem der Datenbankeintrag des Testlaufs aktualisiert wenn fertig. Wenn nun das Update-Versprechen für die Datenbankaktion besteht, sollte der Client informiert werden.

die Funktionalität veröffentlichen Verwendung von PubSub das Abonnement-Manager erhält die Informationen über die aktualisierte Testlauf:

... 
 

 
RunningTestDbService.setToFinished(testRun).then(updatedTestRun => { 
 
    pubsub.publish("testRunChangedChannel", updatedTestRun); 
 
    }) 
 

 
...

Nach dem Abonnement-Manager filtert die Abonnements abhängig von der veröffentlichten TESTRUN und der abonnierten testRunId wird die Subskriptions-Resolver-Funktion aufgerufen. Um den Client zu aktualisieren, muss ich den aktualisierten Testlauf erneut holen.

Wie kann ich das veröffentlichte Testlauf-Objekt innerhalb der Subskriptions-Resolver-Funktion erhalten?

Zeichnung und der Resolver sieht wie folgt aus:

... 
 

 
`testRunChanged(testRunId: ID!): TestRun!` 
 

 
... 
 

 
Subscription: { 
 
testRunChanged(_, { testRunId }) { 
 

 
// need to fetch the test run from database again 
 
    return TestRunDbService.getTestRunWith(testRunId); 
 
    }, 
 
}, 
 

 
...

Antwort

0

Das Objekt in publish Methode als Nutzlast verwendet wird, dann root Parameter Ihrer Methode Abonnement resolver - so in diesem Fall ist dies _ in Ihrer testRunChanged Resolver-Funktion. Sie sollten einfach return _ tun.

Verwandte Themen