【发布时间】:2020-08-15 14:22:21
【问题描述】:
这是我写的:
io.sockets.connected[socketId].emit() // I'm sure `socketId` exists and connected.
但是出现错误:
(node:2416) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'emit' of undefined
at ~/transmister/transmister-server-and-web/server.js:71:60
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:2416) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 5)
我的 Socket.io 版本是"socket.io": "^2.3.0"。
此 API 是否已弃用?还是我的代码有问题?
【问题讨论】:
-
socketId可能存在,但io.sockets.connected[socketId]不存在。 -
我认为最好的方法是将任何套接字存储在
connect事件上并在disconnect上删除它。顺便说一句,io.sockets.sockets[socketId]有效吗? -
@Namysh MrWillCom/labs/tree/master/socket.io-specific-msgs ,我最近测试过。
-
而不是:
sockets.push(socket.id)然后io.sockets.connected[socket.id].emit('event', 'message');,尝试sockets[socket.id] = socket;然后sockets[socket.id].emit('event', 'message');
标签: javascript node.js socket.io