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.`))
)