typescript 如何将参数传递给tRPC订阅?

zvokhttg  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(132)
const postRouter = t.router({
  randomNumber: t.procedure.subscription(() => {
    return observable<{ randomNumber: number }>((emit) => {
      const timer = setInterval(() => {
        // emits a number every second
        emit.next({ randomNumber: Math.round(Math.random() * 10000) })
      }, 1000)

      return () => {
        clearInterval(timer)
      }
    })
  })
})

如何用参数调用这个订阅呢?就像如果我只想让它在arg上的随机数是偶数或奇数时发出。
感谢任何方向

h5qlskok

h5qlskok1#

您可以像使用query和mutation一样使用输入来实现它https://trpc.io/docs/server/procedures#input-validation
服务器端:

randomNumber: t.procedure
    .input(z.object({ odd: z.boolean() }))
    .subscription(({ input }) => {
      return observable<{ randomNumber: number }>((emit) => {
        const timer = setInterval(() => {
          // emits a number every second
          let randomNumber = Math.round(Math.random() * 10000);
          if (
            (input.odd && randomNumber % 2 === 1) ||
            (!input.odd && randomNumber % 2 === 0)
          )
            randomNumber++;
          emit.next({ randomNumber });
        }, 1000);

        return () => {
          clearInterval(timer);
        };
      });
    }),

客户端:

client.randomNumber.subscribe({ odd: false }, {
      onData: (data) => {
        console.log(data);
      }
    });

相关问题