Ich habe den folgenden Code:RxJava Single.concat
model.getCategories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Category>>()
{
@Override
public void call(final List<Category> categories)
{
model.getUnits()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Unit>>()
{
@Override
public void call(List<Unit> units)
{
view.showAddProductDialog(units, categories);
}
});
}
});
Ich habe diese hässliche Verschachtelung. Wie kann ich es reparieren. Ich habe versucht, so etwas wie diese:
Single.concat(model.getCategories(), model.getUnits())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<? extends Object>>()
{
@Override
public void call(List<? extends Object> objects)
{
// do something
}
});
Aber das Problem ist, dass ich kann nicht bestimmt, ob es sich List<Category>
oder List<Unit>
kommt.
Gibt es eine Möglichkeit, concat
zu verwenden und festzustellen, welche Art von Stream kommt (List<Category>
oder List<Unit>
oder etwas anderes)?
Auch ich muss erkennen, dass alle Beobachter abgeschlossen sind, um eine weitere Aktion durchzuführen.
Danke in Beratung.
Ich sehe, es sollte für dieses Beispiel funktionieren, aber was wäre, wenn es mehr geschachtelte Aktionen hätte, nicht nur 2. – Andrey
Protip: schau dir die [javadoc] (http://reactivex.io/RxJava/2.x /javadoc/io/reactivex/Single.html#zip(io.reactivex.SingleSource,%20io.reactivex.SingleSource,%20io.reactivex.SingleSource,%20io.reactivex.functions.Function3)) und/oder welche Methode Überladungen Pop in Content-Assist Ihrer IDE bei der Eingabe von 'Single.'. – akarnokd