tengo un problema. estoy creando una aplicación de chat con react y react redux y estoy usando la biblioteca supabase para enviar solicitudes a mi base de datos supabase. ahora para enviar el mensaje ingresado por los usuarios, tengo un problema. cuando el usuario ingresa diez mensajes juntos al mismo tiempo, esos diez mensajes no se enviarán correctamente a la base de datos y tal vez el último mensaje se envíe correctamente. Ahora, para solucionar este problema, quiero implementar esto: si el usuario ingresa su mensaje, si se envía otra solicitud al mismo tiempo, espere a que se envíe esa solicitud. cuando se envíe esa solicitud, envíe la nueva solicitud. de modo que cuando el usuario ingrese 10 mensajes, por ejemplo, los mensajes se enviarán a la base de datos uno por uno. cada solicitud espera la solicitud de envío y cuando esa solicitud se envía a la base de datos con éxito o tiene un error, luego envía la siguiente solicitud pendiente. Intenté implementar esto pero no pude. porque la función que envía el mensaje de los usuarios a la base de datos es un controlador de eventos y no sé cómo esperar la solicitud de envío. Aquí están los códigos de funciones:
//a function to store users message in database const sendMessageHandler = async (e) => { e.preventDefault(); //here i want to check if an other request is sending, wait for that request to be sent and then send the new request. //create an object with users message infos const userMessage = { from: username, text: messageRef.current.value, time: `${new Date().getHours()}:${new Date().getMinutes()}`, }; //create an id with the value of current chats length const id = chats[currentIndex].chats.length; //store the users message in sending messages state dispatch( chatsActions.addSendingChat({ ...userMessage, id, name: chats[currentIndex].name, }) ); //create the current messages object to update the group row let currentChats = { name: chats[currentIndex].name, users: chats[currentIndex].users, onlines: chats[currentIndex].onlines, chats: chats[currentIndex].chats, unreads: chats[currentIndex].unreads, }; //add users message to current chats currentChats.chats = [...currentChats.chats, userMessage]; //update the chats of the selected group with the new values const { error } = await supabase .from("chats") .update(currentChats) .eq("id", apiChatId); //after updating the row, delete the users message that was in sending messages state from there dispatch(chatsActions.removeSendingChat(id)); };Gracias por su ayuda.
No tengo idea de cómo se implementa esto para la producción, pero lo que puedes hacer es:
sent a una cola (no enviar todavía)