Подписка на Graphql не работает внутри асинхронной функции - PullRequest
0 голосов
/ 21 сентября 2019

Вопрос: Какая подписка на graphql?

Ответ: Клиент отправляет данные на одном конце, и они появляются на другом конце, и это происходит, только если они оба подключены к одному каналу.

Сомнение: необходимо ли иметь один экземпляр PubShub в контексте Graphql.для создания и публикации события в приложении, или вы можете создать распределенный экземпляр во всех модулях, и каждый экземпляр может автоматически прослушивать канал другого

SILLY: Первый, на мой взгляд, правильный, но ни один из них не работает.В первом случае Context.Pubsub.publish (...) возвращает true, поскольку на другом конце [подписка] я ничего не получаю, общая подписка не работает.Пожалуйста, помогите

SHARED PUBSUB

import { Pubsub } from 'graphql-yoga'

... 
context = { PubSub: new PubSub() }
...

...
resolver = {
  anyResolver: async (__, _, Context) {

    // creating event which will fire subscription
    // connected to following Pubsub channel.
    await Context.Pubsub.publish('THEROCK', { 'epoc': 'who am i' })

    return ...Fields...
  }
}
...

...
subscription = {
  MostWanted: {
     subscribe: (__, _, Context) => Context.Pubsub.asyncIterator('THEROCK')
  }
}
...

РАСПРЕДЕЛЕННЫЙ PUBSUB

...
import { Pubsub } from 'graphql-yoga'

const pubsub = new Pubsub()

resolver = {
  anyResolver: async (__, _, Context) {

    // creating event which will fire subscription
    // connected to following Pubsub channel.
    await pubsub.publish('THEROCK', { 'epoc': 'who am i' })

    return ...Fields...
  }
}
...

...
import { Pubsub } from 'graphql-yoga'

const pubsub = new Pubsub()

subscription = {
  MostWanted: {
     subscribe: (__, _, Context) => pubsub.asyncIterator('THEROCK')
  }
}
...
...