angular - Angular RxJS 主题订阅和取消订阅
问题描述
我有一个组件可以从 API 链接获取更新,但是当组件被销毁时 API 调用并没有停止。我正在使用一个主题来执行此操作,并且我取消了订阅。我的 api 服务是
public getupdate(){
return this.httpClient.get(this.serverGetUpdate)
}
我已经在我的组件中订阅了这项服务,并希望每 3 秒获取和更新一次,我确实得到了更新。这是我的代码。
export class InprogressComponent implements OnInit, OnDestroy{
subject=new Subject()
constructor(private apiservice: ApiService) {
}
ngOnInit(): void {
this.getupdate()
}
getupdate(){
this.subject.subscribe(x=>{timer(0,3000).pipe(switchMapTo(this.apiservice.getupdate()),takeWhile(x=>x["data"]=="Something")).subscribe(console.log)})
this.subject.next()
}
ngOnDestroy(): void {
//this.subject.next()
this.subject.unsubscribe()
}
}
我是 RxJS 的新手,我不明白为什么取消订阅后 API 调用没有停止。我也愿意接受其他建议。谢谢
解决方案
试试这个
export class InprogressComponent implements OnInit, OnDestroy{
dataSubscription: Subscription = new Subscription();
ngOnInit(): void {
this.getupdate()
}
getupdate() {
this.dataSubscription = interval(3000).subscribe(() => {
console.log('here');
})
}
ngOnDestroy(): void {
this.dataSubscription.unsubscribe()
}
}
推荐阅读
- arrays - 满足约束的数组中的四倍
- sockets - Netty Detect传入请求是protobuf类型
- mysql - 运行我的 Django 种子 YAML 文件时获取“值必须是整数”
- python-3.x - Python使用apply函数跳过Nan
- javascript - Mocha 说“错误:意外的令牌 {”(使用 @babel/preset-env)
- kettle - Pentaho Kettle 数据集成 - 如何进行循环
- sql - 缺少关键字 Oracle SQL
- reactjs - 在路由数组上映射的 React Router 总是在位置更改时重新获取 - 可以记忆吗?
- ansible - Ansible playbook 返回结果
- php - 在 Laravel Eloquent 查询中填写缺失的日期