3

This is a pretty simple question.

How to implement subscriptions in graphql?

I'm asking specifically for when using graphql.js constructors like below ?

I could not find a clean/simple implementation.

There is another question here, but it deals with relay.js - i don't want to unnecessarily increase the nr of external dependencies in my app.

What i have:

module.exports = function (database){
  return new GraphQLSchema(
    { query: RootQuery(database)
    , mutation: RootMutation(database)
    , subscription: RootSubscription(database) -- i can see this in graphiql - see below
    }
  );
}
function RootSubscription(database){
  return new GraphQLObjectType(
    { name: "RootSubscriptionType"
    , fields:
        { getCounterEvery2Seconds:
              { type: new GraphQLNonNull(GraphQLInt)
              , args :
                  { id: { type:  GraphQLString }
                  }
              , subscribe(parent, args, context){

                  // this subscribe function is never called .. why?

                  const iterator = simpleIterator()
                  return iterator
                }
              }
        }
    }
  )
}

I learned that i need a subscribe() which must return an iterator from this github issue.

And here is a simple async iterator. All this iterator does - is to increase and return the counter every 2 seconds. When it reaches 10 it stops.

function simpleIterator(){
  return {
    [ Symbol.asyncIterator ]: () => {
      let i = 0

      return {

        next: async function(){
          i++
          await delay(2000)
          if(i > 10){
            return { done: true }
          }

          return {
            value: i,
            done: false
          }
        }

      }
    }
  }
}

When i run the graphiql subscription, it returns null for some reason: how to implement graphql subscriptions?

I'm piecing together code from multiple sources - wasting time and hacking it basically. Can you help me figure this one out? Subscriptions are such a big feature, where are they properly documented? Where is that snippet of code which you just copy paste - like queries are for example - look here.

Also, i can't use an example where the schema is separate - as a string/from a file. I already created my schema as javascript constructors. Now since im trying to add subscriptions i can't just move back to using a schema as a string. Requires rewriting the entire project. Or can i actually have both? Thanks :)

AIon
  • 12,521
  • 10
  • 47
  • 73

0 Answers0