我想使用RXJS Observable.基本上它可以正常工作,但是我不仅需要在 observer.next()时作出反应,而且还需要在调用 observerplete()时作出反应. 如何获取RXJS Observable的OnComplete事件?我认为RXJS文档令人困惑.
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 observerplete() 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 observerplete(); } 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方法接受三个回调.最后一个是完整事件.
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(); }); }您也可以利用finally运算符来实现此目的.
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); }); }注意: 如果出现错误,这两个示例之间会有区别: 如果我们添加console.log,我们将在第一种情况下看到 仅打印handleError
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在第二种情况下
-> handleError -> finally换句话说,总是调用finally,而不调用complete.
in other words finally is always called, were complete is not.
更多推荐
RXJS可观察到的doSomething onComplete
发布评论