peek, whenComplete & handleError

Efectos secundarios, continuar por error, y un gancho de finalize — sin bajarte de la cadena a .stream.

FxEvents<T> FxEvents<T>.peek(void Function(T)? onData, {void Function(Object, StackTrace)? onError, void Function()? onDone}) FxEvents<T> FxEvents<T>.whenComplete(void Function() callback) // Rx finalize FxEvents<T> FxEvents<T>.handleError(Function onError, {bool Function(Object)? test}) FxEvents<T> FxEvents<T>.endWith(T value) FxEvents<T> FxEvents<T>.ifEmpty(T Function() fallback)

Lección

El peek de la capa pull observa valores a medida que se tiran. El peek de la capa de eventos es la misma palabra para la misma idea en un stream push: ejecuta un efecto secundario, deja pasar el evento sin cambios. Los ganchos opcionales onError / onDone cubren las otras dos notificaciones. Un callback que lanza se convierte en un evento de error y la cadena continúa — el evento cuyo peek falló no se reemite. Capa de eventos de fxdart, siguiendo a tap / doOn* de Rx.

handleError es la forma por-error-y-continuar: los errores que coinciden (todos los errores cuando se omite test) ejecutan onError y el stream sigue adelante. Eso no es onErrorResume, que cancela la fuente y cambia. Usa handleError para registrar o tragar un fallo puntual; usa onErrorResume para abandonar la conexión. whenComplete es el finalize de Rx: el callback se ejecuta exactamente una vez, al terminar, ante un error, o al cancelar. Aunque lance, la cadena igual se desmonta.

La cadena ya no baja a .stream para endWith, ifEmpty, uniq, takeRight, takeWhile tampoco — ahora son métodos de FxEvents. uniq es global (no adyacente): el conjunto de vistos crece sin límite, así que un feed de larga vida más un uniq ilimitado es una fuga de memoria; prefiere uniqAdjacent cuando solo deban eliminarse las repeticiones consecutivas.

Capa de eventos de fxdart, siguiendo a tap, catchError en su forma que no cambia de stream, y finalize de Rx. Los nombres de la capa pull ganan donde ya significan lo mismo: peek no tap, takeRight no takeLast, uniq no distinct.

Demo 1 · peek como efecto secundario

Demo 2 · endWith, e ifEmpty

Pruébalo tú

Ejercicio: whenComplete al terminar, y al cancelar.

Relacionado: peek — el original de la capa pull, que observa valores a medida que se tiran · onErrorResume — abandonar y cambiar; handleError es la forma que continúa · tap — efecto secundario data-first sobre un solo valor, no un stream