如何在节点应用程序中使用 prisma graphql 订阅
Posted
技术标签:
【中文标题】如何在节点应用程序中使用 prisma graphql 订阅【英文标题】:How to use a prisma graphql subscription in node app 【发布时间】:2019-04-12 09:40:04 【问题描述】:我关注this guide。我正在尝试在我的节点应用程序中收听 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-client
在节点应用程序中创建 prisma graphql 订阅?我还想将其转换为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))
【讨论】:
这可行,但有没有办法将其转换为Observables
?以上是关于如何在节点应用程序中使用 prisma graphql 订阅的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 prisma 2 或 3 和 nexus 模式生成同时生成生成的 crud 和“ondelete 级联”