为什么finally()在捕捉到Angular 2中的可观察对象后不起作用?

为什么finally()在捕捉到Angular 2中的可观察对象后不起作用?,angular,Angular,我试图为以Angular 2结尾的每个请求添加一个加载微调器,因此我扩展了Http服务,称之为HttpService。在每次请求之后,我希望在捕获错误后调用finally()函数,以便停止加载微调器 但打字稿说: [ts]属性“finally”在类型“Observable”上不存在 从“/../../auth/auth.service”导入{AuthService}; 从“@angular/core”导入{Injectable}; 从“@angular/Http”导入{Http,XHRBacke

我试图为以Angular 2结尾的每个请求添加一个加载微调器,因此我扩展了Http服务,称之为HttpService。在每次请求之后,我希望在捕获错误后调用finally()函数,以便停止加载微调器

但打字稿说:

[ts]属性“finally”在类型“Observable”上不存在

从“/../../auth/auth.service”导入{AuthService};
从“@angular/core”导入{Injectable};
从“@angular/Http”导入{Http,XHRBackend,RequestOptions,RequestOptionsArgs,Request,Response,Headers};
从“rxjs/Observable”导入{Observable};
导入“rxjs/add/operator/catch”;
导入“rxjs/add/observable/throw”;
@可注射()
导出类HttpService扩展Http{
建造师(
后端:XHRBackend,
选项:请求选项,
私有authservice:authservice
) {
超级(后端,选项);
this.updateHeaders(options.headers);
}
请求(url:string |请求,选项?:RequestOptionsArgs):可观察{
返回super.request(url、选项)
.catch((响应:响应)=>此.authError(响应))
.最后(()=>{
// ...
/*当请求完成时,在此处执行某些操作。例如
完成旋转装载机*/
});
}
私有authError(响应:响应){
如果(response.status==401 | | response.status==403){
this.authservice.logout();
}
返回可观察。抛出(响应);
}
私有更新头(头:头){
headers.set('Content-Type','application/json');
if(this.authservice.isloggedIn()){
headers.set('Authorization','Bearer${this.authservice.getToken()}`);
}        
}
}

如何在每个http请求之后运行一些代码?最好的方法是什么?

您忘了导入它:

import 'rxjs/add/operator/finally';

各位读者,请注意:

自从angular 6推出rxjs版本6.0以来, 我们现在使用finalize而不是finally

它现在在管道中使用,所以

observable.finally(x=>console.log(x)).subscribe()

现在是

observable().pipe(finalize(x=>console.log(x))).subscribe()

然后从
rxjs/operators


从'rxjs/operators'导入{finalize}

谢谢。我收到错误“finally is not a function”,添加此导入修复了我的问题。为我工作!那是我的问题。谢谢;)请注意,自从angular 6引入rxjs版本6.0以来,我们现在使用finalize而不是finally,它现在用于管道中,因此
observable.finally(x=>console.log(x)).subscribe()现在是
observable().pipe(finalize(x=>console.log(x)).subscribe()
然后从
rxjs/operators
导入它,因此它将是从'rxjs/operators'导入{finalize}
嘿@Stavm您可以添加这个作为答案吗。非常有用的感谢如下:this.http.post('logout',{}).pipe(finalize(()=>{this.app.authenticated=false;this.router.navigateByUrl('/login');})).subscribe();谢谢
import 'rxjs/add/operator/finally';