我使用接线员有问题。基本上,我有多个工资单,我想对每个工资单进行一次检查,并触发一个查询。我只想订阅对特定的工资单成功执行的最后一个查询,如果在上一张收款单完成之前触发了对此付款单的新请求,我希望取消前一个请求。
这是我要找的大理石图的样本:
-----1----1-----1----3----3----3----3-----1---3---1---3---1------>
(魔法运算符,我不清楚)
-------------------1-------------------3-----1---3---1---3---1--->
我对此提出了质疑和质疑,但它做到了以下几点:
-----1----1-----1----3----3----3----3-----1---3---1---3---1------>
脱去
-------------------1-------------------3--------------------1---->
.pipe(
groupBy(payslip => payslip._id),
map(group =>
group.pipe(
debounceTime(200),
switchMap(payslip => httpQuery)
)
),
mergeAll()
)对于当前的解决方案,merge all正在对开关映射进行分组,因此即使对于其他组也会取消。有办法做我想做的事吗?
谢谢!
发布于 2021-05-30 10:44:32
我很难找到你的代码或结果有什么问题。
我在ThinkRx游乐场中放置了以下测试代码
const { rxObserver } = require('api/v0.3');
const { zip, timer, from, of } = require('rxjs');
const { take, map, groupBy, mergeAll, debounceTime, delay, switchMap } =
require('rxjs/operators');
zip(
timer(0, 50),
from([1,1,1,3,3,3,3,1,3,1,3,1]),
).pipe(
map(([_,i])=>i),
groupBy(i=>i),
map(group => group.pipe(
debounceTime(0),
switchMap(i=>of(i).pipe(delay(0))), // simulates http request with know duration
)),
mergeAll(),
).subscribe(rxObserver());通过删除和时间性http-请求,结果是:

如果时间为http-请求= 60 (请注意时间范围较长):

然后用debounce = 10:

在您的代码中,http请求只需要比请求之间的时间更长的时间,这样switchMap就可以正确地取消前面的请求了吗?
https://stackoverflow.com/questions/67758990
复制相似问题