2016-07-05 2 views
3

Я хотел бы использовать RXJS Observable. В принципе, он работает нормально, но мне нужно не просто реагировать, когда observer.next(), но также и тогда, когда вызывается observer.complete(). Как получить событие OnComplete RXJS Observable? По-моему, документ RXJS запутан.RXJS Наблюдаемый 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); 
     }); 
    } 
} 

ответ

10

Метод subscribe принимает три обратных вызова. Последний - для полного события.

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

Вы также могли бы эффективно использовать finally оператор для этого.

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

Это сработало для меня .finally (() => this.handleComplete) – jfgrissom