# Argumentos scheduler

Para limitar la API de algunos operadores, y también en preparación para una gran refactorización en V8, el argumento `scheduler` de muchos operadores ahora está obsoleto. Únicamente está obsoleto en aquellos métodos en los que raramente se utiliza este argumento. Por tanto, a aquellos operadores temporales, como por ejemplo interval, no les afecta este cambio.

Para dar soporte a esta transición se ha añadido la función de creación scheduled.

> Este cambio se introdujo en RxJS 6.5 y se convertirá en *breaking* en RxJS 8.

## Operadores afectados por este cambio

* from
* of
* merge
* concat
* startWith
* endWith
* combineLatest

## Cómo refactorizar

Si se utiliza cualquier operador de la lista anterior y utiliza el argumento `scheduler`, existen tres opciones de refactorización.

### Refactorizando of y from

`scheduled` copia parte del comportamiento de `from`. Por tanto, si se utiliza `from` con un argumento `scheduler`, se puede reemplazar por `scheduled`.

For the of creation function you need to this Observable with scheduled and instead of passing the scheduler argument to of pass it to scheduled. Following code example demonstrate this process.

En lugar de utilizar la función de creación `of`, se debe utilizar `scheduled`, y en lugar de pasarle el argumento `scheduler` a `of`, se le debe pasar a `scheduled`. El siguiente código muestra este proceso:

```
import { of, asyncScheduler, scheduled } from 'rxjs';

// Obsoleto
of([1, 2, 3], asyncScheduler).subscribe((x) => console.log(x));

// Sugerencia de refactorización
scheduled([1, 2, 3], asyncScheduler).subscribe((x) => console.log(x));
```

### Refactorizando merge, concat, combineLatest, startWith y endWith

Anteriormente, si se quería utilizar uno de estos operadores con el argumento scheduler, se hacía así:

```
import { concat, of, asyncScheduler } from 'rxjs';

concat(of('hello '), of('World'), asyncScheduler).subscribe((x) => console.log(x));
```

Para gestionar el cambio se puede aprovechar la función `scheduled`.

```
import { scheduled, of, asyncScheduler, concatAll } from 'rxjs';

scheduled([of('hello '), of('World')], asyncScheduler)
    .pipe(concatAll())
    .subscribe((x) => console.log(x));
```

Se puede aplicar este patrón para refactorizar el uso obsoleto de `concat`, `startWith` y `endWith`, aunque se debe tener en cuenta que se necesita utilizar mergeAll para refactorizar el uso obsoleto de `merge`.

Con `combineLatest`, se debe utilizar combineLatestAll.

Por ejemplo, el código que anteriormente era así:

```
import { combineLatest, of, asyncScheduler } from 'rxjs';

combineLatest(of('hello '), of('World'), asyncScheduler).subscribe(console.log);
```

se convertiría en:

```
import { scheduled, of, asyncScheduler, combineLatestAll } from 'rxjs';

scheduled([of('hello '), of('World')], asyncScheduler)
    .pipe(combineLatestAll())
    .subscribe((x) => console.log(x));
```
