2016-08-16 6 views
6

वहाँ किसी तरह निम्नलिखित प्राप्त करने के लिए है। क्या मैं चाहता हूँ पीछा कर रहा है:RXJava (प्रत्येक नमूदार के लिए concat की तरह है, लेकिन onCompleted के साथ) एक के बाद कई observables चल

  • पहले नमूदार
  • चलाने पहले नमूदार
  • की onCompleted निरीक्षण चलाने दूसरा नमूदार
  • दूसरा नमूदार
  • की onCompleted निरीक्षण तीसरे नमूदार चलाने
  • तीसरे अवलोकन
के onCompleted का निरीक्षण करें

यह concat के साथ किया जा सकता है लेकिन फिर मैं केवल अंतिम onCompleted देख सकता हूं।

बदसूरत समाधान

मुझे पता है, मुझे लगता है कि प्राप्त कर सकते हैं, अगर मैं सिर्फ पूर्व एक के onCompleted घटना से अगले obersvable शुरू करते हैं।

प्रश्न

वहाँ observables की एक मनमाना संख्या के साथ भी साथ इस लक्ष्य को हासिल करने के लिए किसी भी अन्य रास्ता नहीं है?

  • पहले USECASE, मैं - मैं onCompleted घटना से सभी को एक साथ इस चेनिंग से बचने के लिए, चाहते हैं के रूप में यह वास्तव में बदसूरत लग रहा है और गहरी श्रृंखलन ... कम स्पष्ट हो जाता है कि यह हो जाता है

    संपादित करें उस डेटा को उत्सर्जित करना चाहते हैं जो मेरे ऐप ने आखिरी बार लोड किया था (मैं डेटा को डिस्क पर क्रमबद्ध कर दूंगा) => कारण यह है कि, मैं चाहता हूं कि एक बहुत तेज़ ऐप हर समय शुरू हो जाए

  • फिर मैं चाहता हूं डेटा लोडिंग का दूसरा भाग, खाली स्थिति में अद्यतित डेटा लोड करने के लिए
  • तो मैं अप-टू-डेट डेटा

मैं लगातार यूआई अद्यतन करना चाहते की याद आ रही गहरी डेटा लोड करने के डेटा लोड हो रहा है की एक तिहाई रन चाहता हूँ और मैं, जानना चाहते हैं जब डेटा लोड के प्रत्येक स्तर है समाप्त

+0

एकाधिक 'पूर्ण' घटनाओं को देखकर आप वास्तव में क्या करने की कोशिश कर रहे हैं? क्या आप हमें यहां एक उदाहरण का उपयोग कर सकते हैं? –

+0

मेरे प्रश्न के साथ मेरे प्रश्न संपादित ... – prom85

+1

अरे, क्या आपके पास कोई समाधान है? –

उत्तर

0

मुझे लगता है कि concatMap उत्तर हो सकता है। concatMap के साथ आप observables जोड़ सकते हैं और एक बार सदस्यता ले, तो आप कोड हो सकता है कुछ की तरह कर रहे हैं:

Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
    .concatMap(integer -> Observable.just(integer) 
      .observeOn(Schedulers.computation()) 
      .concatMap(i -> { 
       try { 
        Thread.sleep(new Random().nextInt(1000)); 
        return Observable.just(2 * i); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
        return Observable.error(e); 
       } 
      })) 
    .subscribe(System.out::println, 
      Throwable::printStackTrace, 
      () -> System.out.println("onCompleted")); 
9

मुझे आशा है कि नीचे दिए गए कोड में मदद करता है।

Observable<MyData> observable1 = ...; 
Observable<MyData> observable2 = ...; 
Observable<MyData> observable3 = ...; 

Observable 
     .concat(observable1.doOnCompleted(this::onCompleteObservable1), 
       observable2.doOnCompleted(this::onCompleteObservable2), 
       observable3.doOnCompleted(this::onCompleteObservable3)) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(...); 

यहां नमूना विधियां हैं।

void onCompleteObservable1() { 
    //do some work 
} 

void onCompleteObservable2() { 
    //do some work 
} 

void onCompleteObservable3() { 
    //do some work 
} 
संबंधित मुद्दे