GraphQL-subscriptions:如何在订阅解析程序中获取已发布的对象

时间:2017-03-07 14:36:38

标签: javascript node.js graphql subscriptions graphql-subscriptions

我正在使用带有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);
  },
},

...




1 个答案:

答案 0 :(得分:0)

publish方法中使用的对象作为有效负载,然后是您订阅root方法的resolver参数 - 所以在这种情况下,_位于testRunChanged解析器功能。你应该只做return _