我在Angular2的Component中实现了以下功能:
export class MypageEditComponent {
ngOnInit() {
this.timer = Observable.timer(100, 100);
this.timer.subscribe(t => {
this.setFormData();
}
private setFormData() {
this.editUserAcountType = this.authStore.registerInfo.account_type;
this.editAddress = this.authStore.registerInfo.email;
this.editUserName = this.authStore.registerInfo.username;
}
}
我想在Observable.timer
正确存储值后停止重复setFormData()
。
但不知道怎么回事,请告诉我。
答案 0 :(得分:36)
基本上有两种方式:
unsubscribe()
来电回复的订阅对象上调用subscribe()
。只需unsubscribe
就可以这样做。
ngOnInit() {
this.subscription = timer(100, 100).subscribe(t => {
this.setFormData();
});
}
private setFormData() {
...
this.subscription.unsubscribe();
}
或者您可以使用Subject通过takeUntil()
运算符完成Observable:
this.subject = new Subject();
ngOnInit() {
timer(100, 100).pipe(
takeUntil(this.subject),
).subscribe(t => this.setFormData());
}
private setFormData() {
...
this.subject.next();
}
看看这些:
2019年1月:更新了RxJS 6
答案 1 :(得分:10)
当你想要像这样停止计时器时,可以使用unsubscribe
方法
this.timer = Observable.timer(100, 100);
this.subscription = this.timer.subscribe(t => {
this.setFormData();
});
.............
this.subscription.unsubscribe();
答案 2 :(得分:1)
以前的答案尚未真正解决的一个细微差别是,无需停止可观察的计时器/时间间隔-至少不需要与可观察的计时器或计时器本身进行交互。
我之所以来到这里,是因为我在HostedService的start方法中使用计时器设置了一个可观察对象,而在stop方法中,它似乎就像我应该停止它或处置它一样。当然可以吗?好吧可观察的计时器不需要以这种方式停止或处置,仅需要订阅即可,这就是为什么...
可观察的计时器和间隔是冷流的示例(尽管它们看起来像是高温的)。它们是被动的而不是主动的,它们直到订阅后才产生数据,而在没有订阅者时停止产生数据。因此,应该停止计时器的所有工作,以处理所有订阅。
此处有更多信息... [http://introtorx.com/Content/v1.0.10621.0/14_HotAndColdObservables.html]
答案 3 :(得分:0)
xD您知道您可以兑现诺言吗?
import { timer } from 'rxjs';
timer(1000).toPromise().then(res => {
//code here
})
无需处理退订。
答案 4 :(得分:0)
-解决方法
setTimeout(() => observable.next(null) , 2000);