Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 限制rxjs可观察对象的订阅数_Angular_Typescript_Rxjs_Observable - Fatal编程技术网

Angular 限制rxjs可观察对象的订阅数

Angular 限制rxjs可观察对象的订阅数,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我想找到一个可观察的、主题的或事件的发射器替代品,它在任何给定的时间都只支持一个订阅。i、 e.第一个获得订阅的用户将有权执行其订阅主体,当其取消订阅时,将允许任何下一个订阅方继续 目前在observable、subject或event发射器中是否有支持此功能的方法,或者是否有允许此行为的替代方法 或者,如果有某种技术可以在有人订阅/取消订阅目标发射器时执行某些功能,那么我可以使用访问修饰符和布尔值来执行此功能 目前我正在尝试这样的方法: private OpenDialogEmitter

我想找到一个可观察的、主题的或事件的发射器替代品,它在任何给定的时间都只支持一个订阅。i、 e.第一个获得订阅的用户将有权执行其订阅主体,当其取消订阅时,将允许任何下一个订阅方继续

目前在observable、subject或event发射器中是否有支持此功能的方法,或者是否有允许此行为的替代方法

或者,如果有某种技术可以在有人订阅/取消订阅目标发射器时执行某些功能,那么我可以使用访问修饰符和布尔值来执行此功能

目前我正在尝试这样的方法:

  private OpenDialogEmitter = new EventEmitter();
  private isFirstFetch: boolean = true;




getDialogEmitter(): EventEmitter<{}> {

    if (this.isFirstFetch) {
      this.isFirstFetch = false;
      return this.OpenDialogEmitter;
    }
    return null;
  }


setFirstFetch(){
      this.isFirstFetch = true;
}
private OpenDialogEmitter=new EventEmitter();
private isFirstFetch:boolean=true;
getDialogEmitter():EventEmitter{
if(this.isFirstFetch){
this.isFirstFetch=false;
返回这个.OpenDialogEmitter;
}
返回null;
}
setFirstFetch(){
this.isFirstFetch=true;
}
当有人取消订阅时,它必须通过在服务内调用setFirstFetch()方法再次标记observable可用


有更好的内置方法吗?

很难说为什么需要这种方法,因为有
share
之类的操作符可以确保您始终只有一个订阅源可观测

由于
EventEmitter
扩展了
Subject
类,您可以检查它是否有以下订阅(请参阅):

如果要对订阅/取消订阅执行某些操作,可以使用
Observable.defer()
并使用
add()
方法向
subscription
对象添加自定义分解函数:

const source = new Subject();

const o = Observable.defer(() => {
  console.log('subscription');
  return source; // or you can create the source inside this function if you want.
});

const subscription = o.subscribe(...);

subscription.add(() => {
  console.log('unsubscription');
});

很难说你为什么需要这个,因为有一些操作符,比如
share
,可以确保你总是只订阅一个源代码

由于
EventEmitter
扩展了
Subject
类,您可以检查它是否有以下订阅(请参阅):

如果要对订阅/取消订阅执行某些操作,可以使用
Observable.defer()
并使用
add()
方法向
subscription
对象添加自定义分解函数:

const source = new Subject();

const o = Observable.defer(() => {
  console.log('subscription');
  return source; // or you can create the source inside this function if you want.
});

const subscription = o.subscribe(...);

subscription.add(() => {
  console.log('unsubscription');
});

我认为rxjs是React,而不是angular?rxjs:库在angular中可用,不确定它是否可用于React。rxjs是一个独立的库。事实上,对于可观察符号来说,是一个小的多边形填充;不推荐这样做。看,我以为rxjs是React,不是angular?rxjs:库在angular中可用,不确定它是否可用于React。rxjs是一个独立的库。事实上,对于可观察符号来说,是一个小的多边形填充;不推荐这样做。看见