比方说,我有一系列行动。每个动作都被分配了一些id。像这样:
const actions$ = of({ id: 1 }, { id: 2 }, { id: 1 });
Run Code Online (Sandbox Code Playgroud)
现在,对于每个操作,我想在 switchMap 中执行一些逻辑:
actions$.pipe(switchMap(a => /* some cancellable logic */)).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
问题在于每个发出的操作都会取消之前的“某些可取消的逻辑”。
是否可以根据操作id (最好是运算符)取消“某些可取消逻辑” ?就像是:
actions$.pipe(switchMapBy('id', a => /*some cancellable logic */)).subscribe(...)
Run Code Online (Sandbox Code Playgroud)
本质上,switchMap的当前行为:
1. actions$发出 id #1。switchMap订阅嵌套的 observable。
2. actions$发出 id #2。switchMap取消订阅先前的嵌套可观察值。订阅新的。
3. actions$发出 id #1。switchMap再次取消订阅先前的嵌套可观察值。订阅新的。
预期行为:
1. actions$发出 id #1。switchMap订阅嵌套的 observable。
2. actions$发出 id #2。switchMap再次订阅嵌套的 …
我们为什么使用:
(document.getElementById("ipv") as HTMLInputElement).value;
Run Code Online (Sandbox Code Playgroud)
代替:
document.getElementById("ipv").value;
Run Code Online (Sandbox Code Playgroud)
?