Quelle est la façon de simplifier quelque chose comme l'exemple de code suivant? Je ne trouve pas le bon opérateur. Quelqu'un pourrait-il donner un court exemple?
this.returnsObservable1(...)
.subscribe(
success => {
this.returnsObservable2(...)
.subscribe(
success => {
this.returnsObservable3(...)
.subscribe(
success => {
...
},
Comme mentionné dans les commentaires, vous recherchez l'opérateur flatMap
.
Vous pouvez trouver plus de détails dans les réponses précédentes:
Votre exemple se lirait comme suit:
this.returnsObservable1(...)
.flatMap(success => this.returnsObservable2(...))
.flatMap(success => this.returnsObservable3(...))
.subscribe(success => {(...)});
Répondu précédemment pour RxJS 5, je me suis retrouvé sur cette page en utilisant 6.
Dans le cas où vous êtes également sur 6 (et je pense que vous devriez l'être maintenant), vous pouvez utiliser flatmap
comme opérateur dans pipe
.
Modification de l'exemple de code de @ user3743222:
this.returnsObservable1(...)
.pipe(
flatMap(success => this.returnsObservable2(...)),
flatMap(success => this.returnsObservable3(...))
)
.subscribe(success => {(...)});
L'opérateur switchMap peut également être utile. Vous trouverez ici quelques exemples décrivant l'utilité de switchMap par rapport aux abonnements imbriqués:
Ce codepen donne une démo: https://codepen.io/anon/pen/zdXBvP?editors=1111
Rx.Observable
.interval(5000)
.subscribe((val) => {
console.log("outer:", val);
Rx.Observable
.interval(1000)
.subscribe((ival) => {
console.log("inner:", val, ival);
});
});
Ce codepen donne une démo: https://codepen.io/anon/pen/xLeOZW?editors=1111
Rx.Observable
.interval(5000)
.switchMap((val) => {
console.log("outer:", val);
return Rx.Observable.interval(1000).map((ival) => [val, ival]);
})
.subscribe((val) => {
console.log("inner:", val[0], val[1]);
});