Ich möchte den RXJS Observable verwenden. Im Prinzip funktioniert es gut, aber ich muss nicht nur reagieren, wenn observer.next () , sondern auch wenn observer.complete () aufgerufen wird. Wie bekomme ich das Ereignis von OnComplete eines RXJS Observable? Meiner Meinung nach ist das RXJS-Dokument verwirrend.
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);
});
}
}
Die subscribe-Methode akzeptiert drei Rückrufe. Der letzte ist für die gesamte Veranstaltung.
doSome() {
this.service.myMethod()
.subscribe((num:any) => {
console.log(num);
}, (err) => {
this.handleError(err);
}, () => { // <----
this.handleComplete();
});
}
Sie können dazu auch den Operator finally
nutzen.
doSome() {
this.service.myMethod()
.catch(this.handleError)
.finally(this.handleComplete) // <----
.subscribe((num:any) => {
console.log(num);
});
}
Anmerkung: Es gibt einen Unterschied zwischen den beiden Beispielen für den Fall, dass wir Fehler haben: würden wir console.log
s hinzufügen, würden wir im ersten Fall nur handleError
sehen. wird gedruckt
-> handleError
im zweiten Fall
-> handleError
-> finally
mit anderen Worten: finally
wird immer aufgerufen, complete
nicht.