【发布时间】:2020-05-26 21:37:10
【问题描述】:
一般来说,我们需要行为主体功能。但只有在第一次订阅时,我们才应该将订阅发送到 REST 中的服务器。并在最后一次取消订阅时发送取消订阅,并且所有订阅的后期观察者将 gwt 从第一个接收到的最新 json。我可以使用 rxjs 操作符来做到这一点吗?怎么做?还是我应该使用自定义 obserbale ?
目前的自定义代码是这样的:
public observable: Observable<TPattern> = new Observable((observer: Observer<TPattern>) => {
this._observers.push(observer);
if (this._observers.length === 1) {
this._subscription = this.httpRequestStream$
.pipe(
map((jsonObj: any) => {
this._pattern = jsonObj.Data;
return this._pattern;
})
)
.subscribe(
(data) => this._observers.forEach((obs) => obs.next(data)),
(error) => this._observers.forEach((obs) => obs.error(error)),
() => this._observers.forEach((obs) => obs.complete())
);
}
if (this._pattern !== null) {
observer.next(this._pattern); // send last updated array
}
return () => {
const index: number = this._observers.findIndex((element) => element === observer);
this._observers.splice(index, 1);
if (this._observers.length === 0) {
this._subscription.unsubscribe();
this._pattern = null; // clear pattern when unsubscribed
}
};
});
【问题讨论】:
-
你能举一个具体的例子来说明你在寻找什么吗?例如'给定
X,我想实现Y' -
与标准
BehaviorSubject有什么区别?您可以将其与multicast(new BehaviorSubject)一起使用
标签: rxjs rxjs-pipeable-operators rxjs-observables