Как использовать подписку 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))