RXJS Observableを使用したいと思います。基本的には問題なく動作しますが、observer.next()が呼び出されたときだけでなく、observer.complete()が呼び出されたときにも反応する必要があります。 RXJS ObservableのOnCompleteのイベントを取得するにはどうすればよいですか?私の意見では、RXJSのドキュメントは混乱しています。
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);
});
}
}
Subscribeメソッドは3つのコールバックを受け入れます。最後は完全なイベントです。
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);
});
}
note:エラーが発生した場合の2つの例には違いがあります。console.log
sを追加すると、最初のケースではhandleError
のみが出力されます。
-> handleError
2番目のケースでは
-> handleError
-> finally
つまり、finally
は常に呼び出され、complete
は呼び出されません。