在其他语言的流/函数域中有一个常见的操作,那就是 orElse()。它就像一个 if,当当前链没有得到任何结果时,它会更改为备用链。在具有 Maybe 类型的语言中,它基本上会继续 Some 类型的链或更改为 None 类型的 orElse 。
理想情况:
Observable.just(false)
.filter(value -> { return value; })
.map(value -> { return 1; })
.orElse(Observable.just(0));
Observable.<Boolean>error(new IllegalStateException("Just playing"))
.filter(value -> { return value; })
.map(value -> { return 1; })
.orElse(Observable.just(0));
目前可以使用 concat 和 takeFirst 来重现它,但它在语义上并不相同,并且没有正确涵盖错误处理。
Observable.concat(Observable.just(false)
.filter(value -> { return value; })
.map(value -> { return 1; }),
Observable.just(0))
.takeFirst();
看起来他们有这个,但名称不同:默认为空 http://reactivex.io/documentation/operators/defaultifempty.html或 switchIfEmpty。
Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.defaultIfEmpty(0)
.subscribe(val -> {
// val == 0
});
Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.just(0))
.subscribe(val -> {
// val == 0
});
// Error thrown from the first observable
Observable.<Boolean>error(new IllegalStateException("Crash!"))
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.<Integer>error(new IllegalStateException("Boom!")))
.subscribe(val -> {
// never reached
}, error -> {
// error.getMessage() == "Crash!"
});
// Error thrown from the second observable
Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.<Integer>error(new IllegalStateException("Boom!")))
.subscribe(val -> {
// never reached
}, error -> {
// error.getMessage() == "Boom!"
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)