У меня есть тема. И один наблюдатель подписался на это. Как опустить все вызовы Observer, если он уже обрабатывает один?
var subject = new Subject();
var observer = {
next: x => {
//... some long processing is here
console.log('Observer got a next value: ' + x)
}
};
subject.subscribe(observer);
subject.next(0);
subject.next(1);// <-- if 0 value is not processed in the observer then skip it
subject.next(2);// <-- if 0 value is not processed in the observer then skip it
Я причины могу ввести некоторое значение flag
, установить его в Observer перед выполнением и очистить после. И применить оператор фильтра, как это:
var subject = new Subject();
var flag = true;
var observer = {
next: x => {
flag = false;
//... some long processing is here
console.log('Observer got a next value: ' + x)
flag = true;
}
};
subject.filter(() => flag).subscribe(observer);
subject.next(0);
subject.next(1);// <-- if previous value is not processed in the observer then skip it
subject.next(2);// <-- if 0 value is not processed in the observer then skip it
Но я считаю, что существует более изящный и эффективный способ добиться этого.