我如何选择要发射的订阅观察者?

How can I choose which subscribed observers to be emitted?

我有一项使用 SignalR 与服务器通信的服务。服务消费者订阅 Rxjs 的主题,但我想要的是他们应该传递一些额外的数据(在这种情况下是一个字符串),并且在服务从服务器接收到数据后可以通过调用 next() 方法选择要执行的订阅者。

我尝试编写一个新的订阅方法并存储每个订阅,但无法 link 订阅和观察者。这是我的代码:

private subscriptions = new Array<{registerationName:string,subscription:Subscription}>();
private receiver = new Subject(); 

public subscribe(registerationName:string ,next?: (value: {}) => void, error?: (error: any) => void): Subscription
{
     var s = this.receiver.subscribe(next,error);
     this.subscriptions.push({registerationName:registerationName,subscription:s});
     return s;
}

显然上面的方法是行不通的。我到底想做的是这样的事情:

this.receiver.observer.where(p=>p.registerationName==stringFromServer).next({...}) 

不确定这是否是您要找的

const events=new Map()
const addEvent=(event)=>{
   events.set(event,new Subject())
}

const fireEvent=(event,param)=>{
   events.get(event).next(param)
}
const getEvent=(event)=>events.get(event)

addEvent('walk')
fireEvent('walk',2)
getEvent('walk').subscribe(console.log)

据我正确理解您的情况,这就是您想要的解决方案:

拜托,最好调用你想要的方法 getMyData 或一些特定的方法来代替 订阅,你可以调用订阅 Observable 的 returns 在 getMyData() 被称为

private receiver = new Subject();

public getMyData<T>(registerationName: string): Observable<T> {
  return this.receiver.pipe(
    filter(
      ({ stringFromServer, data }) => stringFromServer === registerationName,
    ),
    map(({ stringFromServer, data }) => data),
  );
}

当服务器数据到达时调用如下:

this.receiver.next({stringFromServer, data})

现在,当数据到达并且 receiver-主题得到 next()-ed 时,所有具有特定 registrationNamegetMyData() 观察者将得到 next()-编

现在您的用法如下:

this.someService
  .getMyData('some registration name')
  .subscribe((x) => console.log(x));