Angular 在RxJS订阅服务器上取消订阅已完成,是否冗余?
我想知道这个代码是否有意义:Angular 在RxJS订阅服务器上取消订阅已完成,是否冗余?,angular,rxjs,Angular,Rxjs,我想知道这个代码是否有意义: let subs : Subscription; // getObjectInfo retrieves object information from a MySQL DB subs = this.ObjectService.getObjectInfo(item.id_obj) .subscribe( (retObject : any) => { // Process object here
let subs : Subscription;
// getObjectInfo retrieves object information from a MySQL DB
subs = this.ObjectService.getObjectInfo(item.id_obj)
.subscribe(
(retObject : any) => {
// Process object here
},
(error) => {
// Error in API call
},
() => {
// IS THIS REDUNDANT OR UNNECESSARY?
subs.unsubscribe();
});
我假装的是确保订阅在我从数据库获得信息并进行处理后立即完成,但我不知道这是一种好方法还是没有必要
我问这个问题的原因是因为我有时会看到重复的API调用,我想知道它们是否是因为我没有以正确的方式完成订阅或类似的事情
谢谢 您可以使用
take
或first
:
this.ObjectService.getObjectInfo(item.id\u obj)
.take(1)//或first()
.订阅(…)
因此,它将在第一次发射后自动取消订阅您无需在观测完成时调用
.unsubscribe()
。谢谢你的评论,这是我想知道的。关于链接文章,我在更复杂的组件中使用takeWhile
操作符,在组件被销毁时取消订阅所有订阅,但我在文章中看到了一个更有趣的方法(takeUntil
操作符),因此我将做一些测试。干杯@马丁:你经常需要一个水晶球来知道一个可观测的物体是否能自己完成。我只是说,当他们设计observable时,他们让这个简单的事实很难确定。嗨,我先试试操作符,谢谢你的建议。我认为take
如果没有发出计数,就会抛出一个错误。而如果没有发出任何错误,first
将不会抛出错误。我曾经花了两天时间跟踪一个bug,因为我使用了错误的bug。我会记住这一点,谢谢您的注释@cgTag@cgTag@Feltake
不会抛出,除非您使用了负参数