嗨,我试图按顺序调用两个可观察对象,一个接一个地调用。我尝试使用合并,但它不尊重顺序,所以我去使用concat代替,主要问题是这两个Observable发出不同的类型。从我所看到的zip
可以选择合并两个不同的可观察但是避开了我的头。
所以具体问题是,如何才能有一个接一个地调用顺序API。目前这是我的实施
Observable<SectionEntity> sectionEntitySync = DbProvider.contentResolver(this)
.createQuery(KitchContract.Category.CONTENT_URI, null, KitchContract.DELETED + "=?",
new String[] { KitchContract.NO }, KitchContract.Category.Columns.POSITION + " ASC", true)
.mapToList(SectionEntity::new)
.flatMap(Observable::from)
.flatMap(sectionEntity -> getApi().create(sectionEntity)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()));
Observable<ItemEntity> itemEntitySync = DbProvider.contentResolver(this)
.createQuery(KitchContract.Item.CONTENT_URI, null, null, null,null, false)
.mapToList(ItemEntity::new)
.flatMap(Observable::from)
.flatMap(itemEntity ->
getApi().create(itemEntity)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
);
答案 0 :(得分:1)
当我说得对,你的第二个流并不依赖于第一个流的结果。因此,您可以等待第一个流完成toList
运算符,然后使用flatMap
启动第二个流:
sectionEntitySync
.toList() //collect results. This operator also waits for upstream's onComplete
.flatMapObservable(list -> itemEntitySync) //launch the second observable
.subscribe(...)