【问题标题】:GraphQL-subscriptions: How to get published object in subscription resolverGraphQL-订阅:如何在订阅解析器中获取已发布的对象
【发布时间】:2017-07-27 19:42:24
【问题描述】:

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

...

【问题讨论】:

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


    【解决方案1】:

    publish 方法中用作有效负载的对象是您订阅 resolver 方法的 root 参数 - 所以在这种情况下,这是您的 testRunChanged 解析器函数中的 _。你应该简单地做return _

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2018-07-23
      • 2021-01-14
      • 2022-12-12
      • 2021-02-23
      相关资源
      最近更新 更多