【发布时间】:2025-12-19 04:15:11
【问题描述】:
使用 Angular 我如何订阅像这样的对象数组:
[
'abc/user2': { room: 'abc/user2', user: 'user2' },
'abc/admin': { room: 'abc/admin', user: 'admin' }
]
目前这不起作用:
this.socketService.onRoom().subscribe(rooms => {
this.rooms = rooms;
});
与socketService:
public onRoom() {
return new Observable<any>(observer => {
this.socket.on('room', (data: any) => observer.next(data));
});
}
编辑:
Mybad,看来问题来自服务器(NodeJS/express/socket.io):
chat-server.ts:
public rooms: Array<{room: string, user:string}> = [];
(...)
this.rooms[room] = {room: room, user: socket.user};
this.io.emit('room', this.rooms)
console.log('[server]rooms :', this.rooms)
服务器端,console.log 打印:
[
'abc/user2': { room: 'abc/user2', user: 'user2' },
'abc/admin': { room: 'abc/admin', user: 'admin' }
]
但是socketService 的客户端,如果我在这里做一个console.log(data):
public onRoom() {
return new Observable<any>(observer => {
this.socket.on('room', (data: any) => {
console.log(data)
observer.next(data)
});
});
}
返回:
[]
但如果我发出服务器端:
this.io.emit('room', Object.keys(this.rooms))
客户端返回:
['abc/user2', 'abc/admin']
看起来我无法从 socket.io 发出对象数组?
【问题讨论】:
-
向我们展示服务中的 onRoom() 方法。
-
@VinkoVorih 已编辑;订阅使用一个简单的字符串数组,但我无法让它使用一个对象数组
标签: javascript node.js angular express socket.io