首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GraphQL-订阅:如何在订阅解析器中获取发布的对象

GraphQL-订阅:如何在订阅解析器中获取发布的对象
EN

Stack Overflow用户
提问于 2017-03-07 22:36:38
回答 1查看 566关注 0票数 0

我使用的是带有GraphQL订阅和订阅-传输-ws的express服务器。

我已经使用给定的频道设置了订阅:

代码语言:javascript
运行
复制
...

const subscriptionManager = new SubscriptionManager({
  schema: executableSchema,
  pubsub: pubsub,
  setupFunctions: {
    testRunChanged: (options, args) => {
      return {
        testRunChangedChannel: {
          filter: (testRun) => {
            return testRun.id === args.testRunId;
          }
        },
      };
    },
  },
});

...

在接收到突变之后,在服务器上启动一个进程,在该进程中,测试运行的数据库条目在完成时被更新。现在,当数据库操作的更新承诺通过时,应该通知客户端。

使用来自pubsub的发布功能,订阅管理器获得关于更新的测试运行的信息:

代码语言:javascript
运行
复制
...

RunningTestDbService.setToFinished(testRun).then(updatedTestRun => {
    pubsub.publish("testRunChangedChannel", updatedTestRun);
  })

...

订阅管理器根据发布的testRun和订阅的testRunId过滤订阅后,将调用订阅解析器函数。要更新客户端,我必须再次获取更新后的测试运行。

如何在订阅解析器函数中获取已发布的测试运行对象?

订阅和解析器如下所示:

代码语言:javascript
运行
复制
...

`testRunChanged(testRunId: ID!): TestRun!`

...

Subscription: {
testRunChanged(_, { testRunId }) {

// need to fetch the test run from database again
    return TestRunDbService.getTestRunWith(testRunId);
  },
},

...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 22:47:26

publish方法中用作有效负载的对象是您的订阅resolver方法的root参数-因此,在本例中,它是testRunChanged解析器函数中的_。您只需执行return _即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档