La seule différence entre Observable.of
et Observable.from
est-elle le format des arguments? Comme le Function.prototype.call
et Function.prototype.apply
?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
Pas assez. Lors du passage d'un tableau à Observable.from
, la seule différence entre lui et Observable.of
réside dans le mode de transmission des arguments.
Cependant, Observable.from
acceptera un argument qui est
un objet abonné, une promesse, un objet de type observable, un tableau, un objet itérable ou de type tableau à convertir
Il n'y a pas de comportement similaire pour Observable.of
- qui accepte toujours uniquement les valeurs et n'effectue aucune conversion.
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.
Observable est un autre fait intéressant. Of ([]) sera un tableau vide lorsque vous vous y abonnerez. Où que lorsque vous vous abonnez à Observable.from ([]), vous n'obtiendrez aucune valeur.
Ceci est important lorsque vous effectuez une sauvegarde consécutive 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 data.length = 0 dans la section addSite, le code ci-dessus renvoie Observable.of ([]), puis enregistre les commentaires. Mais si vous le remplacez par Observable.from ([]), les méthodes suivantes ne seront pas appelées.