tRPCttRPC
Powered by
SnowS
tRPC•3y ago
Snow

Individual mutation requests error

Hello, quick question regarding the error handling for tRPC

So I'm creating kind of a chatroom where I use a combination of tRPC and Pusher to send and receive messages. I'm currently stuck though when sending multiple messages (where I'm assuming they get batched in some sort of way) and then one of the requests fails for something like ratelimiting which I will display as first send and then an error.

However, multiple of the other messages that get batched together are never gets their response, leaving them in an infinite sending state (see screenshot below)

Just wondering how I should handle when sending larger amounts of messages like this and/if im doing anything wrong on my end?

I will attach a code snippet below too (I know it's a clusterfuck, just dw abt it):

client:
setLocalMessages((prev) => [...prev, tempChat]);

...

_sendChat(
                { chatId, message: msg, image: img ?? undefined },
                {
                    onSuccess(data) {
                        setLocalMessages((prev) =>
                            [...prev, data].filter((msg) => msg.id !== tempId),
                        );
                    },
                    onError(err) {
                        setLocalMessages((prev) =>
                            prev.map((msg) => {
                                if (msg.id === tempId)
                                    return {
                                        ...msg,
                                        status: "failed",
                                        error:
                                            err.data?.code ===
                                            "TOO_MANY_REQUESTS"
                                                ? "You are sending too many messages."
                                                : "Failed to send message",
                                    };
                                return msg;
                            }),
                        );
                    },
                },
            );
setLocalMessages((prev) => [...prev, tempChat]);

...

_sendChat(
                { chatId, message: msg, image: img ?? undefined },
                {
                    onSuccess(data) {
                        setLocalMessages((prev) =>
                            [...prev, data].filter((msg) => msg.id !== tempId),
                        );
                    },
                    onError(err) {
                        setLocalMessages((prev) =>
                            prev.map((msg) => {
                                if (msg.id === tempId)
                                    return {
                                        ...msg,
                                        status: "failed",
                                        error:
                                            err.data?.code ===
                                            "TOO_MANY_REQUESTS"
                                                ? "You are sending too many messages."
                                                : "Failed to send message",
                                    };
                                return msg;
                            }),
                        );
                    },
                },
            );


server:
const { chatId, message, image } = input;
            
            if (
                !(
                    await ctx.ratelimits.chat.send.regular.limit(
                        ctx.session.user.id,
                    )
                ).success
            )
                throw new TRPCError({
                    code: "TOO_MANY_REQUESTS",
                    message: "You are sending messages too fast.",
                    cause: "You are sending messages too fast.",
                });

            const chat = await ctx.prisma.chat.findUnique({
                ...
            });

            if (!chat)
                throw new TRPCError({
                    code: "NOT_FOUND",
                    message: "You are not a member of any chats by that ID.",
                    cause: "The chat ID is invalid or you are not a member of the chat.",
                });

            ...

            try {
                await pusherServer.trigger(
                    [`chat-${newMessage.chatId}`, ...chat.participantIds],
                    "new-message",
                    ctx.session.user.id,
                );
            } catch (err) {
                console.error(err);
            }
const { chatId, message, image } = input;
            
            if (
                !(
                    await ctx.ratelimits.chat.send.regular.limit(
                        ctx.session.user.id,
                    )
                ).success
            )
                throw new TRPCError({
                    code: "TOO_MANY_REQUESTS",
                    message: "You are sending messages too fast.",
                    cause: "You are sending messages too fast.",
                });

            const chat = await ctx.prisma.chat.findUnique({
                ...
            });

            if (!chat)
                throw new TRPCError({
                    code: "NOT_FOUND",
                    message: "You are not a member of any chats by that ID.",
                    cause: "The chat ID is invalid or you are not a member of the chat.",
                });

            ...

            try {
                await pusherServer.trigger(
                    [`chat-${newMessage.chatId}`, ...chat.participantIds],
                    "new-message",
                    ctx.session.user.id,
                );
            } catch (err) {
                console.error(err);
            }
image.png
tRPCJoin
Move Fast & Break Nothing. End-to-end typesafe APIs made easy.
5,015Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Set Request Headers for individual requests?
volksVvolks / ❓-help
3y ago
Modify mutation error messages?
Jack FischerJJack Fischer / ❓-help
3y ago
What is the mutation error type?
Answer OverflowAAnswer Overflow / ❓-help
3y ago
Error while creating a mutation in NextJS
TarkyTTarky / ❓-help
3y ago