2017-05-11 5 views
1

私はデータソースfun getData(page : Int) : Single<List<Data>>を持っています。takeWhileを毎回新しいシングルにサブスクライブします

私はconditionCheck()戻りtrueまで異なるパラメータとそのソースに毎回をするたびにサブスクライブでき振る舞いを作成したいと思います。

私はこのようなものを想像:ここ

getData(page) 
    .doOnNext { page++ } 
    .doOnNext { /* manipulate data */ } 
    .takeWhile { conditionCheck() } 
    .subscribe({ 
    print "Completed" 
    }) 
+0

あなたが_each time_をによって何を意味するかについて詳しく説明することはできますか?何らかの条件が満たされるまでgetDataを呼び出し続けたいというのは私には聞こえます。新しいパラメータはどうやって生まれますか?あなたは新しいパラメータを思いつくために以前のパラメータを必要としますか、試してみたいすべてのパラメータのリストを持っていますか? – michaelavila

+0

@michaelavila更新された詳細。 –

答えて

0

はそれについて考えるための別の方法(擬似コードっぽい)である:

initialPage = Observable.just(1); 
futurePages = PublishSubject.create(); 

allPossiblePages = Observable.concat(initialPage, futurePages); 

allPossibleData = allPossiblePages 
    .map(page -> getData(page)) 
    .do(page -> futurePages.onNext(/* manipulate page data */)); 

dataYouWant = allPossibleData 
    .filter(data -> conditionCheck(data)) 
    .takeFirst() 
    .subscribe(/* data should be here */); 

多分これは、これを行うための最善の方法ではありませんそうだとすれば、誰かが話すだろう。私はライン.do(page -> futurePages.onNext ..)の大きなファンではないが、このような何かが動作する可能性があります。

私は一緒にここにrxjs(/デモのプロトタイプを作成するのが最も簡単)を使用して実行例を置く:https://plnkr.co/edit/uXE53ygo8REzpbMJdvsD

+0

ええと...私はparamsの部分を単純化しました。それは単なる「ページ」以上のものです。これは単に 'page'以上のもので、' getData()。onSuccess() 'が更新されているので、事前に生成することはできません。 –

+0

しかし、とにかく、それは多くの助けになりました! –

+0

@ martynas-jurkusが編集されました。これがより有用かどうかを教えてください。 – michaelavila

関連する問題