У меня есть простой таймер Rx js, который продолжает работать до тех пор, пока уведомитель не выдаст что-то очень простое c до этого момента.
enum TimerResult = {
COMPLETE,
ABORTED,
SKIPPED
};
_notifier: Subject<TimerResult> = new Subject();
notifier$: Observable<TimerResult> = this._notifier.asObservable();
simpleTimer$ = interval(1000);
startTimer(): Observable<number> <-- **here I want a timerResult** {
return simpleTimer$.pipe(
tap(()=>doSomethingBeautifulWhileRunning),
takeUntil(this.notifier$)
)
}
Чего я хотел бы добиться, так это получить значение выдается уведомителем в результате.
Мне не нужны промежуточные значения, мне нужно только знать, когда оно завершается и с каким результатом.
simpleTimer$.pipe(
tap(()=>doSomethingBeautifulWhileRunning),
last(),
takeUntil(this.notifier$)
).subscribe((result)=>{
// Here, of course, I get the last value
// I need instead the value coming from notifier$
});
Я перепробовал множество возможных решений с операторами Rx, но ни один из них не работал так, как ожидалось. Единственный найденный мной результат, который дает приемлемый результат (но imho очень и очень грязный), был такой:
startTimer(): Observable<TimerResult>{
simpleTimer$.pipe(...).subscribe(); <-- fire the timer, automatically unsubscribed by takeUntil
return this.notifier$.pipe(first());
}
Какой лучший способ получить Rx? Я надеюсь, что я достаточно ясно, любая помощь очень ценится:)