Je suis en train d'apprendre RxJS et Angular 2. Disons que j'ai une chaîne de promesses avec plusieurs appels de fonctions asynchrones qui dépendent du résultat de la fonction précédente, ce qui ressemble à ceci :
var promiseChain = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 2);
}, 1000);
});
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 3);
}, 1000);
});
});
promiseChain.then((finalResult) => {
console.log(finalResult);
});
Mes tentatives de faire la même chose en utilisant uniquement RxJS sans l'utilisation de promesses ont donné le résultat suivant :
var observableChain = Observable.create((observer) => {
setTimeout(() => {
observer.next(1);
observer.complete();
}, 1000);
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 2);
observer.complete()
}, 1000);
});
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 3);
observer.complete()
}, 1000);
});
});
observableChain.subscribe((finalResult) => {
console.log(finalResult);
});
Elle donne le même résultat que la chaîne de promesses. Mes questions sont les suivantes
-
Est-ce que je fais bien les choses ? Y a-t-il des améliorations liées à RxJS que je peux apporter au code ci-dessus ?
-
Comment puis-je faire en sorte que cette chaîne d'observables s'exécute de manière répétée ? Par exemple, l'ajout d'un autre abonnement à la fin ne produit qu'un 6 supplémentaire alors que je m'attends à ce qu'il imprime 1, 3 et 6.
observableChain.subscribe((finalResult) => { console.log(finalResult) ; }) ;
observableChain.subscribe((finalResult) => { console.log(finalResult) ; }) ;
1 3 6 6