Stream.io API чата - Использование потокового чата с Observables / Rx JS in Angular - PullRequest
0 голосов
/ 10 апреля 2020

В Node-версии документов для Stream Chat API используется async/await для подключения к сервису Stream Chat через клиент JS. Я прочитал Rx JS docs о подключении к Websockets, что, как я понимаю, клиент Stream Chat делает под капотом. У меня вопрос, как я получаю Observables из событий потокового чата? Например, из объекта события, такого как этот:

channel.on('message.deleted', event => {
    console.log('event', event);
    console.log('channel.state', channel.state);
});

Спасибо за понимание.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Если у вас есть сокетоподобное соединение, вы можете обернуть его Observable следующим образом:

function channelObs(channel) {
    return new Observable<any>(
        (subscriber: Observer<any>) => {
            channel.on('eventId', 
                event => {
                    subscriber.next(event);
                }
            );
            return () => {// tearDownLogic, i.e. code executed when this Observable is unsubscribed
        }
    );
}

Observable, возвращаемое функцией channelObs, может обрабатываться всеми операторами, предлагаемыми Rx JS

0 голосов
/ 10 апреля 2020

Вам необходимо создать Subject и подписать его следующим образом

chat.service.ts

private chatEventListener = new Subject<any>();

bindEvents(){
   channel.on('message.deleted', event => {
    const eventObj = {
       event : event,
       state : channel.state
    };
    this.chatEventListener.next(eventObj );
  });
}

subscribeToNotifications(){
  this.chatEventListener.asObservable();
}

в component.ts

this.chatService.subscribeToNotifications().subscribe(event => {
   console.log(event);
})
...