如果有新项目进入switchMap
,可能会切断(取消订阅)内部 Observable,因此我们期望以下内容:
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 的方法,但基本上我尝试在它们“最后”做的任何事情在取消订阅时都不会发生。观察者规范有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.`))
)