Как использовать подписку Prisma GraphQL в приложении узла

Я следую этому руководству. Я пытаюсь прослушать подписку graphQL в моем приложении узла. У меня много проблем с реализацией этой подписки. Я пробовал несколько разных способов, перечисленных ниже, ни один из них не работает.

// converted to rxjs observables
from(PrismaClient.$subscribe.priority({
    mutation_in: "CREATED"
})).subscribe(
    (next) => {
        console.log("next", next);
    },
    () => {
        console.log("error");
    },
    () => {
        console.log("complete");
    }
);

// as promise
PrismaClient.$subscribe.priority({
    mutation_in: "CREATED"
}).then(
    (next) => {
        console.log("next", next);
    }
);

Оба из них просто возвращаются в следующем:

{ next: [Function: next],
  return: [Function: return],
  throw: [Function: throw],
  '@@asyncIterator': [Function] }

Я ожидаю, что это вернет priority который был создан каждый раз, когда создается новый. Тем не менее, он возвращает только один раз и сразу завершает и возвращает тот объект, который я перечислил выше.

Я понимаю, что это как-то связано с возвращением Promise<AsyncIterator<...>>, но я не уверен, как решить эту проблему.

Как создать подписку Prisma GraphQL в приложении узла с помощью prisma-client? Я также хотел бы преобразовать это в rxjs Вместо того, чтобы использовать promises, Я просто предпочитаю Observables,

1 ответ

Решение

Вот предложение с Promises и async/await:

const main = async () => {
  const subscription = await PrismaClient.$subscribe.priority({
    mutation_in: 'CREATED',
  })
  handleSubscription(subscription)
}

const handleSubscription = async (subscription) => {
  const result = await subscription.next()
  console.log('do stuff with', result.value)

  if (!result.done) {
    console.log('handle again')
    handleSubscription(subscription)
  }
  else {
    console.log('done')
  }
}

main().catch(e => console.error(e))
Другие вопросы по тегам