В моем клиентском приложении я использую Socket IO для проверки непрочитанных событий. Я делаю запрос к своему бэкэнду, который устанавливает тайм-аут 5 секунд, затем переходит к проверке непрочитанных событий и отправляет любые назад.
// client
socket.on("response", ({ mostRecentMessages }) => {
// do some stuff first
socket.emit("listenForNew", { userId, currentMessagesFromEveryone });
})
// backend
socket.on("listenForNew", ({ userId, currentMessagesFromEveryone }) => {
if (currentMessagesFromEveryone && userId) {
const { MostRecentMessages } = require("./constants/models");
const filteredIds = [];
currentMessagesFromEveryone.forEach(message => {
filteredIds.push(message.conversation._id);
});
console.log("Entered!");
setTimeout(async () => {
const mostRecentMessages = await MostRecentMessages.find({
to: userId,
date: { $gt: connectedUsersAllMessages[userId].timeIn },
conversation: { $nin: filteredIds }
}).populate("to from conversation");
allMessagesSocket.sockets.connected[
connectedUsersAllMessages[userId].socketId
].emit("response", {
mostRecentMessages
});
}, 5000);
}
});
Сначала все работает нормально. Он печатает Entered!
один раз для 4, 5 запросов. Затем 6-го числа он начинает печатать Entered!
дважды.
Почему это происходит и что я делаю неправильно?