Пусть orders$
- последовательность объектов RxJ, как показано ниже. Мы прослушиваем изменения с distinctUntilChanged()
и предпринимаем различные действия в зависимости от того, какой ключ был изменен. Можем ли мы сказать внутри tap()
, какой ключ объекта фактически изменился, не отслеживая предыдущее изменение с помощью внешней previousItem
переменной?
Пример:
let orders$ = of([
{ main: 'pizza', drink: 'cola', id: 0},
{ main: 'pizza', drink: 'cola', id: 1},
...
{ main: 'pizza', drink: 'cola', id: 3332},
{ main: 'pizza', drink: 'fanta', id: 3333}, // <-- drink changes
]);
let previousItem = null;
orders$.pipe(
distinctUntilChanged((o0, o1) => o0.main === o1.main || o0.drink === o1.drink),
tap(item => {
/* Which value actually changed -'main' or 'drink' ?! */
if (previousItem && previousItem.main !== item.main) {
doSthForMainChanged();
}
doSthForDrinkChanged();
previousItem = item; // <-- ... so that not to tweak via external state
})).subscribe();