【问题标题】:How to trigger an apollo graphql subscription immediately?如何立即触发 apollo graphql 订阅?
【发布时间】: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}`)
    })

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

【问题讨论】:

    标签: node.js websocket graphql observable apollo


    【解决方案1】:

    希望对你有帮助....

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

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

    【讨论】:

    • 感谢您指出这一点。虽然它没有回答原始问题,所以它应该是一个评论
    猜你喜欢
    • 2017-09-19
    • 2020-10-08
    • 2022-12-12
    • 2021-01-14
    • 2020-08-03
    • 2020-07-07
    • 2017-09-01
    • 2018-06-09
    • 2022-12-12
    相关资源
    最近更新 更多