RXJS Observable doSomething onComplete

I would like to use the RXJS Observable. Basically it works fine, but I need not just to react when observer.next() but also when observer.complete() is called. How do I get the event of OnComplete of an RXJS Observable? In my opinion the RXJS doc is confusing.

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); }); } } 

2 Answers

The subscribe method accepts three callbacks. The last one is for the complete event.

doSome() { this.service.myMethod() .subscribe((num:any) => { console.log(num); }, (err) => { this.handleError(err); }, () => { // <---- this.handleComplete(); }); } 

You could also leverage the finally operator for this.

doSome() { this.service.myMethod() .catch(this.handleError) .finally(this.handleComplete) // <---- .subscribe((num:any) => { console.log(num); }); } 

note: there is a difference between the two examples in case we have errors: if we would add console.logs we would see that in the first case only handleError is printed

-> handleError 

in the second case

-> handleError -> finally 

in other words finally is always called, were complete is not.

3

As Thierry Templier answered one option is to leverage the finally/finalize (rxjs docs) (but it's not the same as using the complete event, see the notes)


last

Another option to do something on complete is last (rxjs/last)

enter image description here

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like