Javascript Angular,Socket.io:发射对象数组
使用Angular,我如何订阅这样的对象数组:Javascript Angular,Socket.io:发射对象数组,javascript,node.js,angular,express,socket.io,Javascript,Node.js,Angular,Express,Socket.io,使用Angular,我如何订阅这样的对象数组: [ 'abc/user2': { room: 'abc/user2', user: 'user2' }, 'abc/admin': { room: 'abc/admin', user: 'admin' } ] 目前这不起作用: this.socketService.onRoom().subscribe(rooms => { this.rooms = rooms; }); 使用socketService: publi
[
'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));
});
}
服务器端,console.log打印:
[
'abc/user2': { room: 'abc/user2', user: 'user2' },
'abc/admin': { room: 'abc/admin', user: 'admin' }
]
但是在socketService
中的客户端,如果我在此处执行console.log(数据):
但如果我发出服务器端:
this.io.emit('room', Object.keys(this.rooms))
客户端it返回:
['abc/user2', 'abc/admin']
看起来我不能从socket.io发出对象数组?你不能。你必须把它变成某种可观察的东西
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
export class AppComponent implements OnInit {
private readonly data = [
{
'abc/user2': { room: 'abc/user2', user: 'user2' }
},
{
'abc/admin': { room: 'abc/admin', user: 'admin' }
}
];
private data$;
ngOnInit() {
this.data$ = new Observable((observer) => {
observer.next(this.data);
observer.complete();
});
this.data$.subscribe(data => {
console.log(data);
});
}
尽管有很多其他的方法(可能更好的方法)可以做到这一点。这只是一个例子,因为我不知道您想要完成什么。您应该创建一个可观察的对象,您希望它返回到
套接字之外。
方法
public onRoom(): Observable<any> {
BehaviorSubject<any> toReturn = new BehaviorSubject();
this.socket.on('room', (data: any) => toReturn.next(data));
return toReturn;
}
public onRoom():可见{
BehaviorSubject toReturn=新的BehaviorSubject();
this.socket.on('room',(数据:any)=>toReturn.next(数据));
回归回归;
}
然后,您可以订阅myObservable。我终于设法解决了这个问题,没有发出对象数组,而只是发出一个对象
chat server.ts
//public rooms: Array<{room: string, user:string}> = [];
public rooms: any = {};
this.socketService.onRoom().subscribe(rooms => {
this.rooms = rooms;
this.roomsArr = Object.entries(this.rooms);
});
尽管如此,我还是不明白为什么我不能从socket.io中发出一个对象数组。show-us-onRoom()方法在服务中。@VinkoVorih编辑;subscribe使用一个简单的字符串数组,但我无法使它使用对象数组
public onRoom(): Observable<any> {
BehaviorSubject<any> toReturn = new BehaviorSubject();
this.socket.on('room', (data: any) => toReturn.next(data));
return toReturn;
}
private myArray = [
'abc/user2': { room: 'abc/user2', user: 'user2' },
'abc/admin': { room: 'abc/admin', user: 'admin' }
];
private myObservable= Observable.of(this.myArray);
//public rooms: Array<{room: string, user:string}> = [];
public rooms: any = {};
this.socketService.onRoom().subscribe(rooms => {
this.rooms = rooms;
this.roomsArr = Object.entries(this.rooms);
});