Большое спасибо всем за помощь.
Вот что я сделал:
@Injectable()
export class AlertService {
public static readonly DEFAULT_SOURCE = '_unknown_source_';
private _message = new ReplaySubject < AlertMessage > ();
private _deletedMsg = new Array < number > ();
constructor() {}
public sendMessage(source: string = AlertService.DEFAULT_SOURCE,
message: string,
alertLevel: AlertLevel = AlertLevel.ERROR,
): void {
const alertMessage: AlertMessage = {
id: Math.random(),
source: source,
message: message,
level: alertLevel
};
this._message.next(alertMessage);
}
public getMessage(sources: string[] = [AlertService.DEFAULT_SOURCE],
alertLevels: AlertLevel[] = [AlertLevel.ERROR, AlertLevel.WARNING, AlertLevel.INFO, AlertLevel.SUCCESS],
): Observable < AlertMessage > {
return this._message.asObservable().pipe(
filter((msg: AlertMessage) => !this._deletedMsg.includes(msg.id)),
filter((msg: AlertMessage) => sources.includes(msg.source)),
filter((msg: AlertMessage) => alertLevels.includes(msg.level)),
);
}
public removeMessage(id: number): void {
this._deletedMsg.push(id);
}
}
Поэтому я использую _deletedMsg для обхода.Проблема в том, что _deletedMsg будет продолжать расти так же, как и ReplaySubject.Со временем система будет становиться все медленнее.