rxjava2에서 flowable이 조건부 행동으로 이어지는 경우를 처리하기 위해 권장되는 방법을 찾고 있습니다. 그렇지 나는 새로운 String
을 만들고 데이터베이스에 저장하려면 존재 않을 경우rxjava2 - 어쩌면 다른 사람이
보다 구체적으로, 나는 String
이있는 경우 Maybe<String>
가있는 나는 데이터베이스에 String
를 업데이트 할 사항이 있거나.
나는 아래 생각하지만 분명히 내가 무엇을 찾고되지 않습니다 :
이Maybe<String> source = Maybe.just(new String("foo")); //oversimplified source
source.switchIfEmpty(Maybe.just(new String("bar"))).subscribe(result ->
System.out.println("save to database "+result));
source.subscribe(result -> System.out.println("update result "+result));
위 분명히
save to database foo
update result foo
을 생산 나는 또한 시도
가있는 아래의 예상 결과를 제공하지만, 여전히 기분이 ... 이상 하네.
결과가 존재하거나 없을 때 어떻게 조치 할 수 있습니까? 그 유스 케이스는 rxjava2에서 어떻게 처리되어야 하는가? 01
업데이트 나는 아래를 시도하고 내가 위에서 해낸 것보다 청소기 보인다. 그러나 rxjava2 연습을 권장합니다.
Maybe.just(new String("foo"))
.map(value -> Optional.of(value))
.defaultIfEmpty(Optional.empty())
.subscribe(result -> {
if(result.isPresent()) {
System.out.println("update result "+result);
}
else {
System.out.println("save to database "+"bar");
}
});
원본 Observable에서 두 번 구독 중입니다. 당신이 그것을 두 번 실행할 것이라는 의미입니다. 두 코드 블록에서 모두 표시하고 있습니다. – masp
@masp 당신이 맞습니다. 이것은 나의 일을하는 방식이 아닙니다. Empty (비어 있음) 및 Non-Empty (비 공백) 결과에 대해 조치를 취하고 싶을 때 내 문제를 어떻게 해결 하시겠습니까? – simon
첫 번째 블록의 첫 번째 3 줄은 실제로 잘 보입니다. 그러나 그들은 소스가 뭔가를 방출하는 경우 만 다룹니다. 그래서, 소스가 아무것도 나오지 않는 다른 케이스를 생성하면 (간단히 완료), 두 번째 Observable이 실행되는 것을 볼 수 있습니다. 또한 개인적으로 doOn * 메소드를 로그에만 사용합니다. – masp