将 zip() 与可能不会发出值的 Maybe 一起使用
Using zip() with a Maybe that may not emit a value
我正在尝试同时执行两个 Maybe
并在两者都完成后调用特定方法。这适用于两个 Observables return 一个值,但在某些情况下可能不会发出一个项目,因此只调用 doOnComplete
而不是 doOnSuccess
。因此,如果其中一个 Maybes 没有调用 doOnSuccess
,则 zip()
块不会被执行。我想知道如何处理这种情况?
按照我的代码(精简到基本部分):
private void fetchData(){
Maybe<Integer> maybeOne = getId(); // may return Maybe.empty()
Maybe<List<String>> maybeTwo = getList();
Maybe.zip(maybeOne, maybeTwo, (id, list) -> {
initView(id, list); // only called if values have been emitted
return true;
}).subscribe();
}
我希望 zip() 块总是被调用,但具有空值,以防 Maybe 没有调用 onSuccess
。事实并非如此,我可以处理这种情况吗?
您可以使用 materialize 运算符。它基本上将串行调用转换为对象(包装在 Notification
对象中)。
Observable.zip(maybeOne.toObservable().materialize(),
maybeTwo.toObservable().materialize(), (id, list) -> {
Log.d(TAG, "zip completed");
return true;
}).subscribe();
现在您的 zip
将始终 "finish",但可以使用以下方法检索您的真实数据:
id.getValue()
如果你的 maybe 是 Maybe.empty()
那么它不会 return 值,而是 null。
我正在尝试同时执行两个 Maybe
并在两者都完成后调用特定方法。这适用于两个 Observables return 一个值,但在某些情况下可能不会发出一个项目,因此只调用 doOnComplete
而不是 doOnSuccess
。因此,如果其中一个 Maybes 没有调用 doOnSuccess
,则 zip()
块不会被执行。我想知道如何处理这种情况?
按照我的代码(精简到基本部分):
private void fetchData(){
Maybe<Integer> maybeOne = getId(); // may return Maybe.empty()
Maybe<List<String>> maybeTwo = getList();
Maybe.zip(maybeOne, maybeTwo, (id, list) -> {
initView(id, list); // only called if values have been emitted
return true;
}).subscribe();
}
我希望 zip() 块总是被调用,但具有空值,以防 Maybe 没有调用 onSuccess
。事实并非如此,我可以处理这种情况吗?
您可以使用 materialize 运算符。它基本上将串行调用转换为对象(包装在 Notification
对象中)。
Observable.zip(maybeOne.toObservable().materialize(),
maybeTwo.toObservable().materialize(), (id, list) -> {
Log.d(TAG, "zip completed");
return true;
}).subscribe();
现在您的 zip
将始终 "finish",但可以使用以下方法检索您的真实数据:
id.getValue()
如果你的 maybe 是 Maybe.empty()
那么它不会 return 值,而是 null。