首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用条件rxjs6重构嵌套订阅

使用条件rxjs6重构嵌套订阅
EN

Stack Overflow用户
提问于 2018-12-18 14:25:10
回答 2查看 362关注 0票数 1

我知道不推荐使用嵌套订阅,但我找不到任何关于重构它们的好资源。

这是我的代码:

代码语言:javascript
复制
this.checkExists(request.id).subscribe(exists => {
  if (exists) {
    this.getDeleteReason(request.id).subscribe(reason => {
      if (reason) {
        this.checkExists(request.id).subscribe(exists2 => {
          if (exists2) {
            // DO DELETE
          }
        });
      }
    });
  }
});

我试着玩过mergeMap,但总是打不开结。

有人能给我指个方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 16:22:38

filtermergeMap/switchMap的结合。

代码语言:javascript
复制
 this.checkExists(request.id).pipe(
    filter(exists => exists),
    mergeMap(() => this.getDeleteReason(request.id)),
    filter(reason => reason),
    mergeMap(() => this.checkExists(request.id)),
    filter(exist2 => exist2)
  }).subscribe(() => {
      //do delete
  });

编辑:有几种方法可以将reason传递给subscribe。在这种情况下,我会在exist2旁边添加reason

代码语言:javascript
复制
this.checkExists(request.id).pipe(
    filter(exists => exists),
    mergeMap(() => this.getDeleteReason(request.id)),
    filter(reason => reason),
    mergeMap(reason => ({
             exist2: this.checkExists(request.id), 
             reason})),
    filter(({exist2}) => exist2)
  }).subscribe(({reason}) => {
      //do delete
  });
票数 3
EN

Stack Overflow用户

发布于 2018-12-18 14:45:52

如果它们是三个独立任务/观察值,那么可以考虑使用forkJoin

代码语言:javascript
复制
let observable1(param1);
let observable2(param2);
let observable3(param3);

let joinedObservables = forkJoin(observable1, observable2, observable3).subscribe(x => {
  let result1 = x[0];
  let result2 = x[1];
  let result3 = x[2];

  ...
});

如果它们的结果相互依赖,你可以使用switchMapflatMapmergeMapexhaustMap (检查差异)

代码语言:javascript
复制
let resultObservable =  return this.observable1().pipe(mergeMap((param1) => {
  return this.observable2().pipe(map((param1) => {

    ....        

    return <result>;
  }));
}));

resultObservable.subscribe(x => {
   ...
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53827469

复制
相关文章

相似问题

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