NodeJS TypeError: sessionsMap[userId].push is not iterable (cannot read property Symbol(Symbol.iterator))
NodeJS TypeError: sessionsMap[userId].push is not iterable (cannot read property Symbol(Symbol.iterator))
在我的 nodejs 中,它需要通过套接字和 redis 接受用户通知,我使用:
const sessionsMap = {};
RedisClient.subscribe('notification');
RedisClient.on('message', async (channel, message) => {
if(channel === 'notification') {
const notification = JSON.parse(message);
const receiverId = sessionsMap[notification.notification.user_id];
// console.log(notification);
io.sockets.to(receiverId).emit('newNotification', notification);
}
}
socket.emit('askForUserId');
socket.on('receivedUserID', async (userId) => {
const userObject = sessionsMap[userId];
sessionsMap[userId] = [];
sessionsMap[userId].push(...userObject);
sessionsMap[userId].push(socket.id);
});
而且我总是收到错误消息:
0|app | TypeError: sessionsMap[userId].push is not iterable (cannot read property Symbol(Symbol.iterator))
0|app | at Socket.<anonymous> (/var/www/server/app.js:203:29)
在 203 行我有:
sessionsMap[userId].push(...userObject);
但我收到了真实的用户 ID。
我的问题在哪里?我该如何解决?
如果 userObject
是一个数组,那么您不想使用展开运算符和 push 方法。
考虑改为这样做
socket.on('receivedUserID', async (userId) => {
const userObject = sessionsMap[userId];
sessionsMap[userId] = []
if (Array.isArray(userObject)) {
sessionsMap[userId] = [...userObject];
}
sessionsMap[userId].push(socket.id);
});
请注意,以上内容仅在 useObject
是数组时才有效,如果不是,则 push
与您目前正在做的一样,但不会传播。
sessionsMap[userId].push(userObject);
在我的 nodejs 中,它需要通过套接字和 redis 接受用户通知,我使用:
const sessionsMap = {};
RedisClient.subscribe('notification');
RedisClient.on('message', async (channel, message) => {
if(channel === 'notification') {
const notification = JSON.parse(message);
const receiverId = sessionsMap[notification.notification.user_id];
// console.log(notification);
io.sockets.to(receiverId).emit('newNotification', notification);
}
}
socket.emit('askForUserId');
socket.on('receivedUserID', async (userId) => {
const userObject = sessionsMap[userId];
sessionsMap[userId] = [];
sessionsMap[userId].push(...userObject);
sessionsMap[userId].push(socket.id);
});
而且我总是收到错误消息:
0|app | TypeError: sessionsMap[userId].push is not iterable (cannot read property Symbol(Symbol.iterator))
0|app | at Socket.<anonymous> (/var/www/server/app.js:203:29)
在 203 行我有:
sessionsMap[userId].push(...userObject);
但我收到了真实的用户 ID。
我的问题在哪里?我该如何解决?
如果 userObject
是一个数组,那么您不想使用展开运算符和 push 方法。
考虑改为这样做
socket.on('receivedUserID', async (userId) => {
const userObject = sessionsMap[userId];
sessionsMap[userId] = []
if (Array.isArray(userObject)) {
sessionsMap[userId] = [...userObject];
}
sessionsMap[userId].push(socket.id);
});
请注意,以上内容仅在 useObject
是数组时才有效,如果不是,则 push
与您目前正在做的一样,但不会传播。
sessionsMap[userId].push(userObject);