Je voudrais utiliser le RXJS Observable. En gros, cela fonctionne bien, mais je n’ai pas besoin de réagir lorsque observer.next () mais aussi lorsque observer.com plete () est appelé. Comment obtenir l’événement de OnComplete d'un observable RXJS? À mon avis, le document RXJS est source de confusion.
export class Service {
myMethod():Observable<any> {
return Observable.create((observer:any) => {
for(let i=0; i<10; i++) {
observer.next(i);
}
if(true==true) {
// this event I need
observer.complete();
} else {
observer.error(xhr.response);
}
}
}
export class Component() {
// constructor etc.
doSome() {
this.service.myMethod()
// Here I would like to get OnComplete event
.catch(this.handleError)
.subscribe((num:any) => {
console.log(num);
});
}
}
La méthode subscribe accepte trois callbacks. Le dernier est pour l'événement complet.
doSome() {
this.service.myMethod()
.subscribe((num:any) => {
console.log(num);
}, (err) => {
this.handleError(err);
}, () => { // <----
this.handleComplete();
});
}
Vous pouvez également utiliser l'opérateur finally
pour cela.
doSome() {
this.service.myMethod()
.catch(this.handleError)
.finally(this.handleComplete) // <----
.subscribe((num:any) => {
console.log(num);
});
}
remarque: il existe une différence entre les deux exemples au cas où nous aurions des erreurs: si nous ajoutions console.log
s, nous verrions que dans le premier cas seulement handleError
est imprimé
-> handleError
dans le second cas
-> handleError
-> finally
en d'autres termes, finally
est toujours appelé, si complete
ne l'est pas.