Skip to content

Instantly share code, notes, and snippets.

@marcin-adamczewski
Last active June 18, 2017 20:55
Show Gist options
  • Save marcin-adamczewski/77565fe330a77e80397d5bd0c8d1f06c to your computer and use it in GitHub Desktop.
Save marcin-adamczewski/77565fe330a77e80397d5bd0c8d1f06c to your computer and use it in GitHub Desktop.
public Observable<ResponseOrError<String>> addOrRemoveFromFavs(final int postId) {
return getIsFavoriteObservable(postId)
.take(1) // take first value from cache
.doOnNext(isCurrentlyFavorite -> {
updateFavorite(postId, !isCurrentlyFavorite); // toggle value before request for better User Experience
})
.switchMap(isCurrentlyFavorite -> favsApi.addOrRemoveFromFavs(isCurrentlyFavorite)
.compose(ResponseOrError.toResponseOrErrorObservable()) // it's changing error event to onNext event to not finish a chain
.doOnNext(responseOrError -> {
if (responseOrError.isError()) {
updateFavorite(postId, isCurrentlyFavorite); // set back to previous value because of error
}
}));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment