SwitchMap отличается свойством в RxJs ⇐ Javascript
-
Гость
SwitchMap отличается свойством в RxJs
Допустим, у меня есть поток действий. Каждому действию присваивается некоторый идентификатор. Вот так:
const action$ = of({ id: 1 }, { id: 2 }, { id: 1 }); Теперь для каждого действия я хочу выполнить некоторую логику в switchMap:
actions$.pipe(switchMap(a => /* некоторая отменяемая логика */)).subscribe(...); Проблема в том, что каждое выполненное действие отменяет предыдущую «некую отменяемую логику».
Можно ли отменить «некую отменяемую логику» на основе действия id, предпочтительно оператора? Что-то вроде:
actions$.pipe(switchMapBy('id', a => /*некоторая отменяемая логика */)).subscribe(...) По сути, текущее поведение с switchMap:
1. actions$ выдает идентификатор №1. switchMap подписывается на вложенный наблюдаемый объект.
2. actions$ выдает идентификатор №2. switchMap отписывается от предыдущего вложенного наблюдаемого. Подписывается на новую.
3. actions$ выдает идентификатор №1. switchMap снова отписывается от предыдущего вложенного наблюдаемого. Подписывается на новую.
Ожидаемое поведение:
1. actions$ выдает идентификатор №1. switchMap подписывается на вложенный наблюдаемый объект.
2. actions$ выдает идентификатор №2. switchMap снова подписывается на вложенный наблюдаемый объект (на этот раз с номером 2). И вот в чем разница: это не отменяет вариант №1.
3. actions$ выдает идентификатор №1. switchMap отписывается от вложенного наблюдаемого для #1. Подписывается снова, номер 1.
Допустим, у меня есть поток действий. Каждому действию присваивается некоторый идентификатор. Вот так:
const action$ = of({ id: 1 }, { id: 2 }, { id: 1 }); Теперь для каждого действия я хочу выполнить некоторую логику в switchMap:
actions$.pipe(switchMap(a => /* некоторая отменяемая логика */)).subscribe(...); Проблема в том, что каждое выполненное действие отменяет предыдущую «некую отменяемую логику».
Можно ли отменить «некую отменяемую логику» на основе действия id, предпочтительно оператора? Что-то вроде:
actions$.pipe(switchMapBy('id', a => /*некоторая отменяемая логика */)).subscribe(...) По сути, текущее поведение с switchMap:
1. actions$ выдает идентификатор №1. switchMap подписывается на вложенный наблюдаемый объект.
2. actions$ выдает идентификатор №2. switchMap отписывается от предыдущего вложенного наблюдаемого. Подписывается на новую.
3. actions$ выдает идентификатор №1. switchMap снова отписывается от предыдущего вложенного наблюдаемого. Подписывается на новую.
Ожидаемое поведение:
1. actions$ выдает идентификатор №1. switchMap подписывается на вложенный наблюдаемый объект.
2. actions$ выдает идентификатор №2. switchMap снова подписывается на вложенный наблюдаемый объект (на этот раз с номером 2). И вот в чем разница: это не отменяет вариант №1.
3. actions$ выдает идентификатор №1. switchMap отписывается от вложенного наблюдаемого для #1. Подписывается снова, номер 1.
Мобильная версия