使用混合 Maybe 和 Single 时如何避免嵌套订阅
How to avoid nested subscribe when working with mixed Maybe and Single
我交叉了以下需求:
我有一个 returns Maybe
的方法,我需要尽快处理它,如果它 returns 某些东西然后调用另一个方法 returns Single
,否则在 OnComplete
调用 Single
.
这是一个片段:
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err),
() -> {
doSomethingThatReturnsSingle()
.subscribe();
});
知道如何摆脱嵌套的 subscribe
吗?
更新:
最新代码片段
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.switchIfEmpty(doSomethingElseThatReturnsSingle())
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err);
经过评论的讨论,我觉得这可能是一个解决方案。
我会在这里使用 switchIfEmpty。
类似于:
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.switchIfEmpty(doSomethingThatReturnsSingle())
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err);
switchIfEmpty
将在 Maybe
returns 为空时执行。请注意,这与您拥有的不同。你所执行的 doSomethingThatReturnsSingle()
两次。这个新示例执行一次。如果可能 returns 为空,switchIfEmpty
将 运行 它一次,否则,它 运行 在 flatMapSingleElement
上。之前流完成后也是 运行ning。
如果我理解正确,那么在这两种情况下(无论 Maybe 是否为空),你都想调用 doSomethingThatReturnsSingle()
。如果是这样,下面的代码可能会有所帮助,
doSomethingThatReturnsMaybe().isEmpty()
.flatMap(isEmpty-> doSomethingThatReturnsSingle())
.subscribe(obj-> System.out.println(obj));
我交叉了以下需求:
我有一个 returns Maybe
的方法,我需要尽快处理它,如果它 returns 某些东西然后调用另一个方法 returns Single
,否则在 OnComplete
调用 Single
.
这是一个片段:
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err),
() -> {
doSomethingThatReturnsSingle()
.subscribe();
});
知道如何摆脱嵌套的 subscribe
吗?
更新: 最新代码片段
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.switchIfEmpty(doSomethingElseThatReturnsSingle())
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err);
经过评论的讨论,我觉得这可能是一个解决方案。
我会在这里使用 switchIfEmpty。
类似于:
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.switchIfEmpty(doSomethingThatReturnsSingle())
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err);
switchIfEmpty
将在 Maybe
returns 为空时执行。请注意,这与您拥有的不同。你所执行的 doSomethingThatReturnsSingle()
两次。这个新示例执行一次。如果可能 returns 为空,switchIfEmpty
将 运行 它一次,否则,它 运行 在 flatMapSingleElement
上。之前流完成后也是 运行ning。
如果我理解正确,那么在这两种情况下(无论 Maybe 是否为空),你都想调用 doSomethingThatReturnsSingle()
。如果是这样,下面的代码可能会有所帮助,
doSomethingThatReturnsMaybe().isEmpty()
.flatMap(isEmpty-> doSomethingThatReturnsSingle())
.subscribe(obj-> System.out.println(obj));