首页 > 解决方案 > RxJs管道主题不发射值

问题描述

我已经通过 RxJs 支持完成了一些 WebSockets 实现。

listen<T>(action: Action): Observable<T> {
    return this.subject
      .pipe(
          filter(value => value.action === action),
          map(value => {
              delete value.action;
              delete value.id;
              return value;
          })
      );
}

此方法返回 Subject 的管道实例,该实例在 websocket.onmessage 回调中发出到达 WebSocket 实例的所有消息。

ws.onmessage = ({data}) => this.subject.next(JSON.parse(data));

问题是我有两个组件使用这种方法来监听某种类型的消息,而我只能监听一个动作。例如,如果我有这样的东西:

this.websocketService.listen('incomingStream').subscribe(m => console.log(1));
this.websocketService.listen('incomingStream').subscribe(m => console.log(2));

我总是在控制台中得到 1。我想同时多次收听这个事件。

UPD.1

我使用“rxjs”:“^6.2.1”,“rxjs-compat”:“^6.2.1”,

UPD.2

我只是归还财产source,它开始正常工作

listen<T>(action: Action): Observable<T> {
    return this.subject
      .pipe(
        filter(value => value.action === action),
        map(value => {
          delete value.action;
          delete value.id;
          return value;
        })
      )
      .source;
  }

我是随机做的,现在我不明白为什么它开始起作用了

标签: angularwebsocketrxjs

解决方案


just return property source and it started to work properly

listen<T>(action: Action): Observable<T> { return this.subject .pipe( filter(value => value.action === action), map(value => { delete value.action; delete value.id; return value; }) ) .source; }


推荐阅读