我对角度很陌生,我想知道在这种情况下我失踪了什么:
在服务中,我创建了一个BehaviorSubject
来存储Websocket事件:
@Injectable()
export class GlobalEvent {
private _events: BehaviorSubject<IWSEvent[]> = new BehaviorSubject([]);
private socket;
constructor() {
this.socket = io(AppConfig.websocketClient);
this.socket.on('event', (data: IWSEvent) => {
const collection = this._events.value;
collection.push(data.msg.object);
this._events.next(collection);
});
}
list() {
return this._events.asObservable();
}
}
然后在另一项服务中,我订阅了Observable
我正在返回:
@Injectable()
export class InstanceStore {
constructor(private instanceService: InstanceService, private globalEvent: GlobalEvent) {
this.globalEvent.list()
.filter((e) => {
return e.model === 'Instance';
})
.subscribe(
(data: IWSEvent[]) => {
const event = data[data.length - 1];
console.log(event, data);
}
);
}
}
但我在过滤器函数中收到错误:Property 'model' does not exist on type 'IWSEvent[]'.
,而我期望找到一个IWSEvent
作为过滤器函数的参数,而不是数组。
我不理解的是什么?
由于
答案 0 :(得分:1)
看起来你的类型不匹配。您有一个BehaviorSubject<IWSEvent[]>
,会为每个IWSEvent[]
电话发送next()
个实例,但您的过滤器似乎是为IWSEvent
的单个实例编写的。
从它看起来你真的不想将你的事件存储在一个数组中但只有一个BehaviorSubject<IWSEvent>
的流,那么你的过滤器将按预期工作,你不需要抓住最后一项订阅方法中的数组。