【问题标题】:How to use a prisma graphql subscription in node app如何在节点应用程序中使用 prisma graphql 订阅
【发布时间】: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

【问题讨论】:

    标签: typescript rxjs graphql prisma async-iterator


    【解决方案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
    猜你喜欢
    • 2021-02-25
    • 2021-10-04
    • 2018-02-25
    • 2019-01-24
    • 2018-04-05
    • 2019-11-27
    • 2017-10-31
    • 2020-11-17
    • 2019-09-27
    相关资源
    最近更新 更多