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);