javascript - dev - rxjs firebaseapp
RxJs Observable de vs desde (3)
¿Es la única diferencia entre
Observable.of
y
Observable.from
del formato de argumentos?
¿Te gusta
Function.prototype.call
y
Function.prototype.apply
?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
Es importante tener en cuenta la diferencia entre
of
y
from
cuando se pasa una estructura tipo matriz (incluidas las cadenas):
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
imprimiría toda la matriz a la vez.
Por otra parte,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
imprime los elementos 1 por 1.
Para las cadenas, el comportamiento es el mismo, pero a nivel de personaje.
No exactamente.
Al pasar una matriz a
Observable.from
, la única diferencia entre ella y
Observable.of
es la forma en que se pasan los argumentos.
Sin embargo,
Observable.from
aceptará un
argument
que es
un objeto suscribible, una Promesa, un objeto observable, una matriz, un objeto iterable o una matriz para convertir
No hay un comportamiento similar para
Observable.of
, que siempre acepta solo valores y no realiza conversiones.
Otro hecho interesante es Observable.of ([]) será una matriz vacía cuando se suscriba. Donde como cuando se suscribe a Observable.from ([]) no obtendrá ningún valor.
Esto es importante cuando realiza un ahorro consecutivo con switchmap. Ex:
.do((data) => {
this.jobService.save$.next(this.job.id);
})
.switchMap(() => this.jobService.addSites(this.job.id, this.sites)
.flatMap((data) => {
if (data.length > 0) {
// get observables for saving
return Observable.forkJoin(jobSiteObservables);
} else {
**return Observable.of([]);**
}
})).do((result) => {
// ..
})
.switchMap(() => this.saveComments())
....
si data.length = 0 en la sección addSite, el código anterior devuelve Observable.of ([]) y luego va a guardar los comentarios. Pero si lo reemplaza con Observable.from ([]), no se invocarán los métodos siguientes.