比方说,我有一个动作流。每个动作都分配了一些 id。像这样:
const actions$ = of({ id: 1 }, { id: 2 }, { id: 1 });
现在,对于每个动作,我想在 switchMap 中执行一些逻辑:
actions$.pipe(switchMap(a => /* some cancellable logic */)).subscribe(...);
问题是每个发出的动作都会取消以前的“一些可取消的逻辑”。
是否可以根据操作id取消“一些可取消的逻辑” ,最好是操作员?就像是:
actions$.pipe(switchMapBy('id', a => /*some cancellable logic */)).subscribe(...)
本质上,switchMap的当前行为:
1. actions$发出 id #1。switchMap订阅嵌套的 observable。
2. actions$发出 id #2。switchMap取消订阅之前的嵌套 observable。订阅新的。
3. actions$发出 id #1。switchMap再次取消订阅之前的嵌套 observable。订阅新的。
预期行为:
1. actions$发出 id #1。switchMap订阅嵌套的 observable。
2. actions$发出 id #2。switchMap再次订阅嵌套的 observable(这次是 #2)。这就是区别,它不会取消来自 #1 的那个。
3. actions$发出 id #1。switchMap取消订阅 #1 的嵌套 observable。再次订阅,#1。