191 votes

RxJs Observable de vs de

La seule différence entre Observable.of et Observable.from le format des arguments? Vous aimez les Function.prototype.call et Function.prototype.apply ?

 Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
 

232voto

Tsvetan Ovedenski Points 1331

Il est important de noter la différence entre of et from lors du passage d'une structure de type tableau (y compris les chaînes):

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

serait imprimer tout le tableau à la fois.

D'autre part,

 Observable.from([1, 2, 3]).subscribe(x => console.log(x));
 

imprime les éléments 1 par 1.

Pour les chaînes, le comportement est le même, mais au niveau du personnage.

137voto

cartant Points 35253

Pas tout à fait. Lors du passage d'un tableau à l' Observable.from, la seule différence entre elle et Observable.of est la façon dont les arguments sont passés.

Toutefois, Observable.from accepte un argument qui est

un subscribable objet, d'une Promesse, d'une Observable, un Tableau, un objet iterable ou un tableau comme objet à être converti

Il n'y a pas de comportement similaire Observable.of - qui toujours n'accepte que les valeurs et n'effectue aucune conversion.

21voto

Josf Points 170

Un autre fait intéressant est Observable.de([]) sera un tableau vide lorsque vous vous abonnez à elle. Où que lorsque vous vous abonnez à Observables.à partir de([]) vous n'en n'importe quelle valeur.

Ceci est important lorsque vous faites un consécutives d'enregistrement avec 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 les données.longueur = 0 dans addSite section, le code ci-dessus est de retour Observables.de([]) et puis s'en va pour enregistrer des commentaires. Mais si vous le remplacer Observables.à partir de([]), le suivant des méthodes sera pas appelé.

rxfiddle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X