[英]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.