2016-12-07 1 views
0

Я довольно новыми для углового, и мне интересно, что я не хватает в этой ситуации:Машинопись: фильтр BehaviourSubjet asObservable

В службе создать 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 как параметр функции фильтра, а не массив.

Что я не понимаю?

Благодаря

ответ

1

Похоже, у вас есть несоответствие типов. У вас есть BehaviorSubject<IWSEvent[]>, который отправит экземпляр IWSEvent[] для каждого звонка next(), но ваш фильтр, кажется, написан для одного экземпляра IWSEvent.

От того, что похоже на то, что вы не хотите хранить свои события в массиве, но просто имеете поток BehaviorSubject<IWSEvent>, тогда ваш фильтр будет работать по назначению, и вам не нужно захватывать последний элемент массива в вашем методе подписки.

+0

Хорошо спасибо, я получил то, что мне не хватало. Вызов 'asObservable' Я ожидал получить только последний массив' IWSEvent [] ', в то время как я получаю массив' IWSEvent [] 'массивов, по одному для каждого последующего вызова. Это правильно? – teone

Смежные вопросы