2017-01-25 8 views
0

У меня есть наблюдаемый звонок с модификацией, который застегнул три вызова API , но я хочу иметь 3 вызова вместе, но когда-то один из вызовов терпит неудачу, но у меня есть только один главный вызов, который обязательный для меня и остальных вызовов является необязательным, потому что, когда один из них терпит неудачу, он делает ошибку, и я не хочу этого, я думал, что есть, например, JoinObservable.when (OperatorJoinPatterns.or (call1, call2). то , но единственное, что есть иmake Observable optional in zip operator with retrofit

Observable.zip(getSearchObservable(FIRST_PAGE), App.getApi().allbookmarks(), SpotlightUtil.getSpotLightBanner(), App.getApi().getFollowingSuggestions(AppConfigUtil.getFollowingSuggestions().getLimit()), 
       (searchResult, myFavouritesResults, spotlightListResult, followingSuggestionsResult) -> combineCall(searchResult, myFavouritesResults, spotlightListResult, followingSuggestionsResult, false)) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .doOnNext(spotlightsAndSearchResultAndSuggestionsResult -> { 
//my main call that i want if that fail the request should fail 
        if (!NetUtils.isServerOk(spotlightsAndSearchResultAndSuggestionsResult.getSearchResult().getStatus())) { 
         throw new ServerErrorException(spotlightsAndSearchResultAndSuggestionsResult.getSearchResult().getErrorMessage()); 
        } 

        if (spotlightsAndSearchResultAndSuggestionsResult.getSearchResult().posts.size() < PAGE_SIZE) { 
         rvPosts.setFinished(true); 
        } 
        hideLoader(); 
        mPostAdapter.mSuggestions = spotlightsAndSearchResultAndSuggestionsResult.getFollowingSuggestionsResult().getSuggestion(); 
        checkToAddOrRemoveFeedbackSpotLight(spotlightsAndSearchResultAndSuggestionsResult.getSearchResult().posts, true); 
            }) 
       .doOnError(throwable -> { 
        ErrorScreenUtils.checkError(throwable, this, true); 
        hideLoader(); 
       }) 
       .retryWhen(RxActivity.RETRY_CONDITION).compose(bindUntilEvent(FragmentEvent.DESTROY)) 
       .subscribe(); 

ответ

1

doOnError не остановить распространение ошибок, так что она нарушает логику.

Для дополнительного использования источника один из onErrorResumeNext, onErrorReturnItem, onErrorReturn операторов. Вы можете заменить ошибка с фиктивным значением, которое может быть успешно zip PED:

Observable.zip(
    source1, 
    source2, 
    optionalSource3.onErrorReturnItem(stub) 
) 
... 
+0

вы можете показать пример для моего кода, пожалуйста? –

 Смежные вопросы

  • Нет связанных вопросов^_^