首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rxjs,合并多个组的最后查询结果(将switchMap与groupBy相结合)

Rxjs,合并多个组的最后查询结果(将switchMap与groupBy相结合)
EN

Stack Overflow用户
提问于 2021-05-30 07:57:24
回答 1查看 94关注 0票数 2

我使用接线员有问题。基本上,我有多个工资单,我想对每个工资单进行一次检查,并触发一个查询。我只想订阅对特定的工资单成功执行的最后一个查询,如果在上一张收款单完成之前触发了对此付款单的新请求,我希望取消前一个请求。

这是我要找的大理石图的样本:

-----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---->

代码语言:javascript
复制
    .pipe(
        groupBy(payslip => payslip._id),
        map(group =>
          group.pipe(
            debounceTime(200),
            switchMap(payslip => httpQuery)
          )
        ),
        mergeAll()
      )

对于当前的解决方案,merge all正在对开关映射进行分组,因此即使对于其他组也会取消。有办法做我想做的事吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-30 10:44:32

我很难找到你的代码或结果有什么问题。

我在ThinkRx游乐场中放置了以下测试代码

代码语言:javascript
复制
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就可以正确地取消前面的请求了吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67758990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档