RxJs管道主题不会散发价值

时间:2018-06-18 14:25:52

标签: angular websocket 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

我用了 &#34; rxjs&#34;:&#34; ^ 6.2.1&#34;, &#34; rxjs-compat&#34;:&#34; ^ 6.2.1&#34;,

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;
  }

我是随机完成的,现在我不明白为什么会开始工作

2 个答案:

答案 0 :(得分:0)

尝试使用share运算符

grep "\"tool\":\"SEETEST\"" * -l | xargs ls -lSh

答案 1 :(得分:0)

只返回属性源,它开始正常工作

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; }