Is it possible to concatenate multiple observables?
For example: I have 3 function:
ensureUserLogged():Observable<boolean>
createEntity():Observable<Entity>
checkEntity():Observable<boolean>
I would like to do something like:
Observable.combine (ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
or something like:
ensureUserLogged().then (logged => createEntity()).then (newEntity => checkEntity ())...
Otherwise I need to write a ugly piramid:
ensureUserLogged().subscribe (
res => {
createEntity ().subscribe (
res => {
checkEntity ().subscribe (
res => { console.log ("I'm finally here") },
error {}
)
},
err => {
}
);
},
err => {
}
)
Is there something to achieve my will?
Thanks
You need to use Observable.forkJoin
for parallel execution:
Observable.forkJoin(ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
checkEntityResult
will correspond to an array containing each elements: the first one for the result of ensureUserLogged
, ...
To execute things in series, you need to use the flatMap
operator:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return createEntity();
}).flatMap((resultOfCreateEntity) => {
return checkEntity();
}).subscribe((resultOfChekEntity) => {
(...)
});
You can notice that you can mix things. For example something like that:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return Observable.forJoin(createEntity(), checkEntity());
}).subscribe((resultOfCreateEntityAndChekEntity) => {
(...)
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With