如何立即触发 apollo graphql 订阅?

Posted

技术标签:

【中文标题】如何立即触发 apollo graphql 订阅?【英文标题】:How to trigger an apollo graphql subscription immediately? 【发布时间】:2020-01-05 12:20:32 【问题描述】:

我有一个使用 Apollo Server 和 Node.js 的项目设置。以下代码使用 pubsub 模式侦听帖子中的更改,并在它们是 'POSTS_CHANGED' pubsub.publish 事件时触发 graphql 订阅。我将 setInterval 计时器用于演示目的。

我想在客户端连接时触发订阅。那就是在他/她加载页面时获取帖子。但我想不出办法。

const  ApolloServer, PubSub, gql  = require('apollo-server')

const pubsub = new PubSub();

setInterval(async () => 
    pubsub.publish('POSTS_CHANGED',  posts: [title: 'title1', body: 'body1'] )
, 5*1000)

const typeDefs = gql`
    type Post 
        title: String
        body: String
    

    type Subscription 
        posts: [Post]
    
`

const resolvers = 
    Subscription: 
        posts: 
            subscribe: () => pubsub.asyncIterator(['POSTS_CHANGED']),
        
    
;

const apolloServer = new ApolloServer( typeDefs, resolvers)

apolloServer.listen()
    .then((connection) => 
        console.log(`Apollo http running on $connection.url`)
        console.log(`Apollo web sockets running on $connection.subscriptionsUrl`)
    )

我想避免在页面加载时使用单独的查询来加载帖子,以保持项目的简单和干净,除非有严重的理由这样做。

【问题讨论】:

【参考方案1】:

希望对你有帮助....

您应该在asyncIterator 中使用字符串值。

Subscription: 
    posts: 
        subscribe: () => pubsub.asyncIterator('POSTS_CHANGED'),
    
  

【讨论】:

感谢您指出这一点。虽然它没有回答原始问题,所以它应该是一个评论

以上是关于如何立即触发 apollo graphql 订阅?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apollo 中关闭 GraphQL 订阅的套接字连接

使用 Express-GraphQL 和 React-Apollo 订阅 GraphQL

如何使用 apollo ios 客户端实现 graphql 订阅

如何在客户端 NextJS 中使用 Apollo GraphQL 订阅?

如何在 jest / apollo 客户端中捕获被拒绝的 graphql 订阅?

带有 Meteor 的 Blaze-Apollo,观察者不会触发变量更改的订阅