我使用的是带有GraphQL订阅和订阅-传输-ws的express服务器。
我已经使用给定的频道设置了订阅:
...
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);
  },
},
...
发布于 2017-03-07 22:47:26
在publish方法中用作有效负载的对象是您的订阅resolver方法的root参数-因此,在本例中,它是testRunChanged解析器函数中的_。您只需执行return _即可。
https://stackoverflow.com/questions/42651007
复制相似问题