Поскольку switchMap
может отрезать (отписаться) внутреннюю наблюдаемую часть, если появится новый элемент, мы ожидаем следующее:
const items = from([1, 2])
const seen = []
const derived = items.pipe(
switchMap(item =>
concat(
of(`now: ${item}`),
of(`end: ${item}`).pipe(delay(10))
)
)
)
derived.subscribe(next => seen.push(next))
, в результате чего seen
будет иметь:
['now: 1', 'now: 2', 'end: 2']
^ unsubscribed to 1 here, as planned!
Вопрос в том, есть ли способ получить уведомление об отмене пункта 1? Причина в том, что если отмены происходят слишком часто, я бы хотел знать.
Я пробовал способы изменения внутренних Observables, но в основном все, что я пытаюсь сделать «в конце», просто не происходит, когда отписывается. Спецификация Observer имеет next
, completed
и error
, но ничего не значит "рано закончился", поэтому я не уверен, что попробовать.
Я бы хотел иметь возможность передать дополнительную функцию в switchMap, которая будет вызываться оператором при отмене внутренней наблюдаемой и предоставлении аргумента.
const derived = items.pipe(
switchMap(item => concat(
of(`now: ${item}`),
of(`end: ${item}`).pipe(delay(10))
),
(item) => console.error(`${item} was cut off.`))
)