回调 Observable

Callback to Observable

我有这个功能可以从 Cloud Firestore 获取文档:

fun getBasicItems(callback: (MutableList<FireStoreBasicItem>) -> Unit) {
    fireStore.collection("BasicItems")
        .get()
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val basicItems = mutableListOf<FireStoreBasicItem>()
                for (document in task.result!!) {
                    val fireStoreBasicItem = document.toObject(FireStoreBasicItem::class.java)
                    basicItems.add(fireStoreBasicItem)
                    callback(basicItems)
                }
            }
        }
}

在我的 ViewModel 中,我想将其转换为 Observable,然后再转换为 ViewState:

private fun loadDataTransformer(): ObservableTransformer<ItemEvent.LoadDataEvent, ItemsViewState> {
    return ObservableTransformer { event ->
        event.map {
                 itemRepository.getBasicItems(){myBasicItemList -> Observable.just(myBasicItemList)}

    }
}

我也用 Observable.fromCallable 试过了。我做错了什么?

编辑:我的解决方案

private fun loadDataTransformer(): ObservableTransformer<ItemEvent.LoadDataEvent, ItemsViewState> {
    return ObservableTransformer { event ->
        event.flatMap {
            Single.create<MutableList<FireStoreBasicItem>> {
                itemRepository.getBasicItems { myBasicItemList ->
                    it.onSuccess(myBasicItemList)
                }
            }.toObservable()
                .map {
                    ItemsViewState.ItemDataState(it)
                }
        }
    }
}

如果您只需要一个项目列表,我建议您使用 Single 而不是 Observable。然后你可以使用 Single.create:

private fun loadDataTransformer(): Single<ItemsViewState> =
    Single.create { emitter ->
        itemRepository.getBasicItems() { myBasicItemList ->
            val viewState =  // do some transformations
            emitter.onSuccess(viewState)
        }
    }