Если я правильно понимаю, чего вы хотите достичь, вам, вероятно, нужно построить Observable, который испускает какой-то объект, который содержит как исходное значение (т.е. синий, красный, зеленый в вашем случае), так и флаг, который указывает был ли зеленый цвет в опровергнутых значениях.
Если это правда, вы можете попытаться написать код по этим направлениям
const s = new Subject<string>();
setTimeout(() => s.next('B'), 100);
setTimeout(() => s.next('G'), 1100);
setTimeout(() => s.next('B'), 1200);
setTimeout(() => s.next('G'), 1300);
setTimeout(() => s.next('R'), 1400);
setTimeout(() => s.next('B'), 2400);
let hasGreen = false;
s
.do(data => hasGreen = hasGreen || data === 'G')
.debounceTime(500)
.map(data => ({data, hasGreen})) // this map has to come before the following do
.do(() => hasGreen = false)
.subscribe(data => console.log(data))
Будьте осторожны с последовательностью. В частности, вы должны поместить оператор map
, который создает объект, который вы хотите испустить, перед do
, который сбрасывает вашу переменную.