2016-07-05 6 views
3

Ich möchte das RXJS Observable verwenden. Grundsätzlich funktioniert es gut, aber ich muss nicht nur reagieren, wenn observer.next() sondern auch wenn observer.complete() aufgerufen wird. Wie erhalte ich das Ereignis OnComplete eines RXJS Observable? Meiner Meinung nach ist das RXJS-Dokument verwirrend.RXJS Observable doSomething onComplete

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

Antwort

10

Die Subscribe-Methode akzeptiert drei Rückrufe. Der letzte ist für das komplette Ereignis.

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

Sie könnten auch die für diese finally Betreiber nutzen.

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

Das funktionierte für mich .finally (() => this.handleComplete) – jfgrissom