我知道不推荐使用嵌套订阅,但我找不到任何关于重构它们的好资源。
这是我的代码:
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,但总是打不开结。
有人能给我指个方向吗?
发布于 2018-12-18 16:22:38
filter和mergeMap/switchMap的结合。
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。
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
});发布于 2018-12-18 14:45:52
如果它们是三个独立任务/观察值,那么可以考虑使用forkJoin
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];
...
});如果它们的结果相互依赖,你可以使用switchMap,flatMap,mergeMap,exhaustMap (检查差异)
let resultObservable = return this.observable1().pipe(mergeMap((param1) => {
return this.observable2().pipe(map((param1) => {
....
return <result>;
}));
}));
resultObservable.subscribe(x => {
...
});https://stackoverflow.com/questions/53827469
复制相似问题