Apollo v2 订阅 graphql

Posted

技术标签:

【中文标题】Apollo v2 订阅 graphql【英文标题】:Apollo v2 subscriptions graphql 【发布时间】:2020-10-08 07:34:41 【问题描述】:

我在订阅方面遇到了问题。 实际上,以这种方式实现here 所述的订阅解析器可以正常工作:

  Subscription: 
  event_subscription:
       subscribe: withFilter(
        () => pubsub.asyncIterator('ObjectName'),
        (payload, variables) => 
          return payload.objectName.id === variables.id
        ,
      ),
    

但我需要在 event_subscription 调用上添加一些逻辑。 我正在尝试像这样添加一个简单的 console.log

Subscription: 
      event_subscription:
      console.log("TEST"),
      subscribe: withFilter(
        () => pubsub.asyncIterator('ObjectName'),
        (payload, variables) => 
          return payload.objectName.id === variables.id
        ,
      ),
    

但它不起作用并返回此错误:


 "error": 
    "message": "Subscription field must return Async Iterable. Received: undefined."
  

订阅内不能调用函数吗? 如何在订阅调用中调用函数? 感谢您的帮助

【问题讨论】:

【参考方案1】:

你需要调用 pubsub.publish(SOME_KEY, 你的变量 ); 通常在突变中执行逻辑。在你的情况下 SOME_KEY = 'ObjectName'

【讨论】:

实际上我已经管理了发布方法并且它工作正常。我的问题与在 event_subscription 中调用某些函数的可能性有关。之前似乎甚至无法使用 console.log 打印一些东西,它让我返回了我报告的错误。所以没有console.log它工作正常,使用console.log它不起作用。你知道它是否存在一种在事件订阅中添加一些逻辑的方法? 如果你在前端使用 react,你可以使用带有选项 onsubscriptiondata 的 useSubscription 钩子并在那里执行逻辑,在后端我认为这是不可能的。

以上是关于Apollo v2 订阅 graphql的主要内容,如果未能解决你的问题,请参考以下文章

使用“apollo-server-azure-functions”的 Apollo 订阅

如何:取消订阅 Apollo (subscribeToMore) 订阅?

Apollo:在订阅更新时更新 React 道具?

如何在生产中使用 apollo 订阅

Apollo graphQL 订阅使用哪个包

Apollo Client V2 以错误的顺序获取数据