我有一个值数组,需要将其发布到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时出现的任何错误。任何帮助将非常感激 。预先感谢。
您有一个编译问题,因为您传递了一个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)
}
}