0

我对角度很陌生,我想知道在这种情况下我缺少什么:

在一个服务中,我创建一个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作为过滤器函数的参数,而不是数组。

我不明白什么?

谢谢

4

1 回答 1

1

看起来您的类型不匹配。您有一个将为每个调用BehaviorSubject<IWSEvent[]>发送一个实例,但您的过滤器似乎是为单个实例编写的。IWSEvent[]next()IWSEvent

从看起来你并不想将你的事件存储在一个数组中,而只是有一个流,BehaviorSubject<IWSEvent>那么你的过滤器将按预期工作,你不需要在订阅方法中获取数组的最后一项。

于 2016-12-07T01:47:33.350 回答