簡體   English   中英

GraphQL-subscriptions:如何在訂閱解析器中獲取已發布的對象

[英]GraphQL-subscriptions: How to get published object in subscription resolver

我正在使用具有GraphQL訂閱和subscriptions-transport-ws的快遞服務器。

我已使用給定頻道設置了訂閱:

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

接收到突變后,服務器上將啟動一個過程,該過程將在完成后更新測試運行的數據庫條目。 現在,當數據庫操作的更新承諾通過時,應該通知客戶端。

使用pubsub中的發布功能,訂閱管理器將獲取有關更新的測試運行的信息:

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

訂閱管理器根據已發布的testRun和已訂閱的testRunId過濾訂閱后,將調用訂閱解析器功能。 要更新客戶端,我必須再次獲取更新的測試運行。

如何在訂閱解析器函數內部獲取已發布的測試運行對象?

訂閱和解析器如下所示:

 ... `testRunChanged(testRunId: ID!): TestRun!` ... Subscription: { testRunChanged(_, { testRunId }) { // need to fetch the test run from database again return TestRunDbService.getTestRunWith(testRunId); }, }, ... 

這樣,在publish方法中用作有效負載的對象就是您的訂閱resolver方法的root參數-因此,在這種情況下,您的testRunChanged解析程序函數中的testRunChanged_ 您應該簡單地return _

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM