typescript - 如何在节点应用程序中使用 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
。
解决方案
这是一个关于 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))
推荐阅读
- java - MQTT:paho 是否存储失败的出站消息
- javascript - 如何在常规 html 文件中使用模块化 js 文件(带有“导出”)?
- php - Xampp 网络连接
- r - 为 RStudio 中的每个参与者创建每个参与者 ID 的列表,其中包含 3 个数据框
- java - 在第一次扫描时使用scanner.nextLine 时,扫描仪会跳到第二次扫描
- javascript - 列出 DFS 中所有可能的循环
- c - 字符串长度未正确显示
- assembly - 如何在 NASM 中为 x86 程序集上的 `ADD r/m16, imm16` 生成匹配 `81 /0 iw` 的输出?
- postgresql - 有没有办法将 csv 视为表来匹配键并将数据导入到 postgres 中的适当行?
- python - 如何创建服务或 shell 脚本以在 virtualenv 中运行项目?