无法使用MergeDelayError

问题描述 投票:0回答:1

我有一个值数组,需要将其发布到api链接。到目前为止,方法是遍历每个元素,然后发布。但是,我正在将代码迁移到rxJava并进行改进。我尝试实现下面提到的代码来完成该任务,但出现错误“使用提供的参数无法调用任何函数”

Observable.mergeDelayError(Observable.fromIterable(schedules)
                .map { 'Retrofit API call' })

[我注意到mergeDelayError需要Iterable<? extends ObservableSource<? extends T>> sources,而Observable.fromIterable(schedules)返回的类型为<T> Observable<T>。还有其他方法可以用mergeDelayError来实现。如果没有,还有其他选择吗?我之所以选择这种方法,是为了处理将列表的每个项目发布到API时出现的任何错误。任何帮助将非常感激 。预先感谢。

android observable retrofit rx-java2 rx-android
1个回答
0
投票

您有一个编译问题,因为您传递了一个ObservableSource,其中需要一个Iterable of ObservableSource。

请查看以下解决方案:

首先,您需要创建一个ObservableSources的Iterable(列表),然后将其传递给mergeDelayError。

@Test
fun whatever() {
    val reqHandlerImpl = ReqHandlerImpl()

    val schedules = listOf("req1", "req2", "req3")

    // create Iterable of Observables, which will call Retrofit, when subscribed to
    val observables: List<Observable<String>> = schedules.map { reqHandlerImpl.req(it) }

    val merged = Observable.mergeDelayError(observables)

    merged.test().assertValueSequence(schedules)
}

interface ReqHandler {
    fun req(uri: String): Observable<String>
}

class ReqHandlerImpl : ReqHandler {
    override fun req(uri: String): Observable<String> {
        return Observable.just(uri)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.