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);
},
},
...