在我的客户端应用程序上,我正在使用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!
两次。
为什么会这样,我在做什么错了?