Documentación RxJS
  • Introducción
  • Operadores
    • Combinación
      • combineAll
      • combineLatest
      • concat
      • concatAll
      • exhaust
      • forkJoin
      • merge
      • mergeAll
      • race
      • startWith
      • switchAll
      • withLatestFrom
      • zip
    • Condicional
      • defaultIfEmpty
      • every
      • find
      • findIndex
      • isEmpty
      • sequenceEqual
    • Creación
      • ajax
      • defer
      • from
      • fromEvent
      • fromEventPattern
      • fromFetch
      • generate
      • iif
      • interval
      • of
      • range
      • throwError
      • timer
    • Gestión de Errores
      • catchError
      • retry
      • retryWhen
    • Filtración
      • audit
      • auditTime
      • debounce
      • debounceTime
      • distinct
      • distinctUntilChanged
      • distinctUntilKeyChanged
      • elementAt
      • filter
      • first
      • ignoreElements
      • last
      • sample
      • sampleTime
      • single
      • skip
      • skipLast
      • skipUntil
      • skipWhile
      • take
      • takeLast
      • takeUntil
      • takeWhile
      • throttle
      • throttleTime
    • Matemáticos y Agregación
      • count
      • max
      • min
      • reduce
    • Multidifusión
      • connect
      • multicast
      • publish
      • publishBehavior
      • publishLast
      • publishReplay
      • refCount
      • share
      • shareReplay
    • Transformación
      • buffer
      • bufferCount
      • bufferTime
      • bufferToggle
      • bufferWhen
      • concatMap
      • concatMapTo
      • exhaust
      • exhaustMap
      • expand
      • groupBy
      • map
      • mapTo
      • mergeMap
      • mergeMapTo
      • mergeScan
      • pairwise
      • partition
      • pluck
      • scan
      • switchMap
      • switchMapTo
      • window
      • windowCount
      • windowTime
      • windowToggle
      • windowWhen
    • Utilidad
      • delay
      • delayWhen
      • dematerialize
      • finalize
      • materialize
      • observeOn
      • repeat
      • repeatWhen
      • subscribeOn
      • tap
      • timeInterval
      • timeout
      • timeoutWith
      • timestamp
      • toArray
  • Conceptos
    • Observables
    • Observadores
    • Operadores
    • Schedulers
    • Sujetos
    • Suscripción
    • Testing de Canicas
  • API
    • Índice
      • ArgumentOutOfRangeError
      • bindCallback
      • bindNodeCallback
      • CompletionObserver
      • config
      • ConnectableObservable
      • EmptyError
      • ErrorObserver
      • FactoryOrValue
      • GroupedObservable
      • identity
      • InteropObservable
      • isObservable
      • MonoTypeOperatorFunction
      • NextObserver
      • noop
      • Notification
      • ObjectUnsubscribedError
      • observable
      • Observable
      • ObservableInput
      • ObservedValueOf
      • ObservedValuesFromArray
      • Observer
      • Operator
      • OperatorFunction
      • PartialObserver
      • pipe
      • scheduled
      • SchedulerAction
      • SchedulerLike
      • Subscribable
      • SubscribableOrPromise
      • Subscriber
      • Subscription
      • SubscriptionLike
      • TeardownLogic
      • TimeInterval
      • TimeoutError
      • Timestamp
      • UnaryFunction
      • Unsubscribable
      • UnsubscriptionError
      • VirtualTimeScheduler
    • ajax
      • AjaxError
      • AjaxRequest
      • AjaxResponse
      • AjaxTimeoutError
    • Schedulers
      • animationFrame
      • asap
      • async
      • queue
    • Sujetos
      • AsyncSubject
      • BehaviorSubject
      • ReplaySubject
      • Subject
      • WebSocketSubject
    • webSocket
      • WebSocketSubjectConfig
    • Testing
  • Guías
    • Glosario
    • Importación
    • Instalación
    • Breaking Changes
      • Argumentos Array
      • Argumentos resultSelector
      • Argumentos scheduler
      • Argumentos subscribe
      • Conversión a Promesas
      • Multicasting
  • Sobre Nosotros
    • El Equipo
    • Código de Conducta
Powered by GitBook
On this page
  • Descripción
  • Ejemplos
  • Recursos adicionales
  1. Operadores
  2. Utilidad

repeatWhen

Repite o no una secuencia Observable en función de un Observable de notificaciones

PreviousrepeatNextsubscribeOn

Last updated 2 years ago

Signatura

Firma

repeatWhen<T>(notifier: (notifications: Observable<any>) => Observable<any>): MonoTypeOperatorFunction<T>

Parámetros

Retorna

MonoTypeOperatorFunction<T>: El Observable fuente modificado con lógica de repetición.

Descripción

Retorna un Observable que refleja el Observable fuente con la excepción de un evento complete. Si el Observable fuente hace una llamada complete, repeatWhen emitirá al Observable retornado por el notificador. Si ese Observable hace una llamada complete o error, entonces este método hará una llamada complete o error en la suscripción hija. Si no, repeatWhen volverá a suscribirse al Observable fuente.

Ejemplos

Repetir una secuencia de números con cada click

import { repeatWhen } from "rxjs/operators";
import { fromEvent, range } from "rxjs";

const click$ = fromEvent < MouseEvent > (document, "click");

const number$ = range(1, 3);

number$.pipe(repeatWhen(() => click$)).subscribe(console.log);
// Salida: 1, 2, 3 (click) 1, 2, 3

Suscribirse al Observable fuente con cada click, desencadenando una nueva petición AJAX con un id aleatorio

import { repeatWhen, map } from "rxjs/operators";
import { ajax } from "rxjs/ajax";
import { fromEvent, defer } from "rxjs";

const ids = [
  "58611129-2dbc-4a81-a72f-77ddfc1b1b49",
  "2baf70d1-42bb-4437-b551-e5fed5a87abe",
];

function getRandomId() {
  return ids[Math.floor(Math.random() * ids.length)];
}

const click$ = fromEvent<MouseEvent>(document, "click");

defer(() =>
  ajax.getJSON(`https://ghibliapi.herokuapp.com/films/${getRandomId()}`)
)
  .pipe(
    map(({ title }) => title),
    repeatWhen(() => click$)
  )
  .subscribe(console.log);
// Salida: (click) Castle in the Sky (click) My Neighbor Totoro (click) My Neighbor Totoro...

Ejemplo de la documentación oficial

Repetir un flujo de mensajes con cada click

import { of, fromEvent } from "rxjs";
import { repeatWhen } from "rxjs/operators";

const source = of("Repeat message");
const documentClick$ = fromEvent(document, "click");

source
  .pipe(repeatWhen(() => documentClick$))
  .subscribe((data) => console.log(data));

Recursos adicionales

StackBlitz
Documentación oficial en inglés
StackBlitz
Diagrama de canicas del operador repeatWhen
Source code