API的顺序通过可观察到的呼叫



嗨,我试图让两个可观察到的可观察到一个接一个地被调用。我尝试使用合并,但它不尊重顺序,因此我去了使用concat,主要问题是这两个可观察到的发射不同类型。从我看到的zip来看,可以选择合并两个可观察到的两个不同的选择。

因此,混凝土问题SI,一个人如何将顺序的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())
                );

当我正确正确时,您的第二个流不依赖第一个流的结果。因此,您可以等待第一个流与toList操作员一起使用,然后使用flatMap启动第二个流:

sectionEntitySync
    .toList() //collect results. This operator also waits for upstream's onComplete
    .flatMapObservable(list -> itemEntitySync) //launch the second observable
    .subscribe(...)

相关内容

  • 没有找到相关文章

最新更新