2017-07-26 82 views
0

我想要查找在任何给定时间只支持一个订阅的可观察的主题或事件发射器替换。即第一个获得订阅的人将有权执行其订阅的机构,并且当它退订时,任何下一个订阅者都将被允许继续。rxjs observable的订阅数量限制

目前是否有任何支持此功能的可观察,主体或事件发射器内的方法或可用于此行为的替换方法。

或者,如果有与当过有人赞同我可以执行一些功能,一些技术/我们的目标发射退订然后我就可以使用访问修饰符和一个布尔值执行此功能。

目前,我想是这样的:

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

当曾经有人退订它必须通过调用setFirstFetch()内的服务方法再次标记观察到的可用。

有没有更好的和内置的方法?

+0

我想rxjs是发生反应,没有棱角? – rrd

+0

rxjs:库在Angular中可用,不确定它是否可用于React。 –

+1

RxJS是一个独立的图书馆。事实上,[它唯一的依赖](https://github.com/ReactiveX/rxjs/blob/5.4.2/package.json#L208-L210)是一个可观察符号的小型填充。 – cartant

回答

1

很难告诉你为什么需要这个,因为那里是运营商,如share建议,以确保您始终只有一个订阅源观测。

由于EventEmitter扩展Subject类,你可以检查是否有任何订阅具有以下(见https://github.com/ReactiveX/rxjs/blob/master/src/Subject.ts#L28):

const source = new Subject(); 

... 

if (source.observers.length > 0) { 
    ... 
} 

如果你想在订阅执行一些动作/退订您可以使用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'); 
});