簡體   English   中英

如何立即觸發阿波羅graphql訂閱?

[英]How to trigger an apollo graphql subscription immediately?

我使用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}`)
    })

我要避免使用單獨的Query來加載頁面加載時的帖子,以保持項目的簡潔明了,除非有嚴重的理由。

希望對您有所幫助。

您應該在asyncIterator使用String值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM