【发布时间】:2018-05-18 01:44:15
【问题描述】:
我从 API 服务获得一笔交易,条件是如果交易状态为“待处理”,则继续重新加载并订阅该交易,直到交易状态为“完成”或“拒绝”。我的代码只在第一次工作,然后下次访问,页面是空白的,但数据仍然在控制台中运行,即使我取消订阅它。
这是我的代码:
export class TransactionSummaryComponent implements OnInit, OnDestroy {
transaction: Models.Transaction = <Models.Transaction>{};
cancelling: boolean = false;
goToPayment: boolean = false;
private dataRefreshSub: Subscription;
private subscribeToDataSub: Subscription;
private timer: Observable<any>;
constructor(
private route: ActivatedRoute,
private router: Router,
private apiService: ApiService,
private zone: NgZone,
@Inject(PLATFORM_ID) private platformId: Object) { }
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
this.getTransaction();
}
}
getTransaction() {
this.route.paramMap
.switchMap((params: ParamMap) => this.apiService.getTransaction(params.get('id')))
.subscribe((transaction: Models.Transaction) => {
this.transaction = transaction;
if (this.transaction.status === 'Pending') {
this.refreshData();
}
});
}
refreshData() {
this.dataRefreshSub = this.route.paramMap
.switchMap((params: ParamMap) => this.apiService.getTransaction(params.get('id')))
.subscribe((transaction: Models.Transaction) => {
this.transaction = transaction;
this.subscribeToData();
});
}
subscribeToData() {
this.zone.runOutsideAngular(() => {
NgZone.assertNotInAngularZone();
this.timer = Observable.timer(1, 5000);
this.subscribeToDataSub = this.timer
.subscribe(() => {
this.refreshData();
});
});
}
ngOnDestroy() {
if (this.dataRefreshSub !== undefined) {
this.dataRefreshSub.unsubscribe();
}
if (this.subscribeToDataSub !== undefined) {
this.subscribeToDataSub.unsubscribe();
}
}
}
【问题讨论】:
-
你有几个嵌套订阅,这总是一种反模式,你只是从最近的刷新订阅中退订,你失去了对所有其他订阅的引用。
-
问题是什么?你试过什么?您面临哪些问题?这不是一个“请修复我的代码”网站....
-
@bryan60 好的,我明白你的意思了,我会尝试取消订阅所有订阅
-
@olivarra1 你可以写,但我看不懂,我还是不明白。至少布莱恩非常清楚地理解我的问题。我什至没有要求你修复我的代码,我在这里通过解释问题而不是问像 1 + 1 = 之类的问题来问了很多问题。无需面对任何麻烦制造者(也许你想要这个)。谢谢你的投票,那么男人;)
标签: angular observable subscription