2017-09-17 78 views

回答

0

對於相同的情況下,我使用的毗連運算這需要多個觀測量並連接它們的序列

如果響應序列不需要那麼你可以使用合併操作者也。

Concat VS Merge operaror

0

嘗試的可觀doOnNext()map()方法和使用同步每個響應的​​,並進一步通過他們

+0

你能解釋一下,爲什麼不使用'''doOnNext()'''''map()'''?因爲在使用Rx Java進行Retrofit改造時,如果沒有''''doOnNext()''',''''''execute()''''''''''''''''''''''在點運算符之後的'''沒有顯示任何選項。 –

+0

答案變得相當大的評論,我在線程中給了一個完整的答案 –

1

沒有,你應該使用map()doOnNext(),它看起來像這樣

Observable.just(1) 
    .doOnNext(value -> { 
     someRequestX().execute();  
    }) 
    .map(value -> { 
     return nextRequestY().execute();  
    }) 
    .doOnNext(requestYResponse-> { 
     someRequesZ(requestYResponse.someValue).execute();  
    }) 
    .map(requestYResponse-> { 
     return someRequesK(requestYResponse.someValue).execute();  
    }) 
    .map(requestKResponse -> { 
     return someRequesJ(requestKResponse.someValue).execute();  
    }) 
    .subscribe(requestJResponse -> { 
     doSOmethingWithFinalResponse(requestJResponse); 
    }) 
0

首先,對於網絡請求最好使用Single,然後Observable,bec因爲總是隻有一個項目。要從一個請求切換到另一個請求,您可以使用flatMap

假設你的代碼是相似的,你可以試試這個:

class Dto1 {} 

class Dto2 {} 

class Dto3 {} 

public interface Api { 

    Single<Dto1> getDto1(); 

    Single<Dto2> getDto2(); 

    Single<Dto3> getDto3(); 
} 

private Api api; 

public void callApi() { 
    api.getDto1() 
      .doOnSuccess(dto1 -> {/*do something with dto1*/}) 
      .flatMap(dto1 -> api.getDto2()) 
      .doOnSuccess(dto2 -> {/*do something with dto2*/}) 
      .flatMap(dto2 -> api.getDto3()) 
      .doOnSuccess(dto3 -> {/*do something with dto3*/}) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe() 
} 
相關問題