GraphQL 订阅:如何在订阅解析器中获取已发布的对象
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
参数 - 因此在这种情况下,这是 _
14=]解析器函数。你应该简单地做 return _
.
我正在使用带有 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
参数 - 因此在这种情况下,这是 _
14=]解析器函数。你应该简单地做 return _
.