Generalidades

La incorporación de RxJava Observable se considera dañina-Parte 3 | Stelios Franzkakis

Como ya estamos Nuestra serie, nuestra función deberá utilizarse como alternativa. Completable.mergeArray() Combine uno o más Completables en uno.

Cuando se fusiona Completable, el primer error emitido generalmente termina en sentido descendente. En este caso, no queremos terminarlo en el primer error; queremos recopilar los resultados de cada flujo y luego construir nuestra propia lógica para reaccionar. Esto evitará el procesamiento en sentido descendente cuando varios flujos señalen errores al mismo tiempo, lo que es la causa del bloqueo.

Espero que estés de acuerdo con Jennifer

Paso 1: Convierta los completos en sencillos

Result Es una clase sellada personalizada, utilizada para el tipo de retorno de nuestros Singles, representará el evento emitido por el correspondiente Completable:

sealed class Result 
object Complete : Result()
class Error(val throwable: Throwable) : Result()
val singles: List<Single<Result>> = completables.map 
it
.toSingleDefault<Result>(Result.Complete)
.onErrorReturn throwable ->
Result.Error(throwable)

Paso 2: Singles con cremallera

Ahora que tenemos la lista de solteros, necesitamos usar Single.zip() operador:

val result = Single.zip(singles)  results: Array<Any> ->
results.firstOrNull it is Result.Error ?: Result.Complete

El último paso: convertirlo de nuevo en Completable

Como estamos trabajando duro para reemplazar Completable.mergeArray() Todavía tenemos que devolver un Completable. Esto significará cambiar la «compresión» Single<Result> volverse Completable Como último paso:

return result.flatMapCompletable 
if (it is Result.Error)
Completable.error(it.throwable)
else
Completable.complete()

Ahora hemos escrito nuestra implementación safeMergeArray() Función, estamos listos para ejecutar nuestras pruebas nuevamente y esperamos que pasen.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba