firebaseapp dev compat javascript rxjs

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.

rxfiddle