angular2和我的服务公告执行多次
我不明白 这就是我想要做的。我在api服务器上运行一个模型,运行大约需要5-10分钟。因此,我轮询api服务器以确定它何时完成,然后我将添加代码以触发一个snackbar,表明模型已完成 1) 在我的应用程序组件中,我订阅了一项服务,该服务将侦听来自其他组件的公告 app.component.tsangular2和我的服务公告执行多次,angular,Angular,我不明白 这就是我想要做的。我在api服务器上运行一个模型,运行大约需要5-10分钟。因此,我轮询api服务器以确定它何时完成,然后我将添加代码以触发一个snackbar,表明模型已完成 1) 在我的应用程序组件中,我订阅了一项服务,该服务将侦听来自其他组件的公告 app.component.ts ngOnInit(){ this.polllingCallService() } polllingCallService(){ this.polling_sub = this.po
ngOnInit(){
this.polllingCallService()
}
polllingCallService(){
this.polling_sub = this.pollingService.pollingAnnounced$.subscribe(
polling => {
this.polling = polling;
console.log('WOWWWWWWWWW')
if (this.polling){
this.pollingRemoteService(polling)
} else{
console.log('polling as nothing to do...')
}
});
} //end
我从另一个组件发送公告
this.pollingService.announcePolling({'model_id':gg,'is_output':false});
好吧,它可以工作,但它会根据日志调用两次:
WOWWWWWWWWW {model_id: "aaaaa", is_output: false}
WOWWWWWWWWW {model_id: "aaaaa", is_output: false}
此外,还将执行两次以下操作:
this.pollingRemoteService(polling)
还有一次是这么多次:
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
this.pollingRemoteService(polling)
这样就执行了很多次:
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
app.component.ts:132 WOWWWWWWWWW {model_id: "bbbbbb", is_output: false}
this.pollingRemoteService(polling)
因此,我在轮询服务中获得api服务器两次或两次以上,而实际上应该是一次
为什么会发生这种情况
这是我的投票服务:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class PollingService {
constructor() { }
private pollingAnnouncedSource = new Subject<object>();
// Observable string streams
pollingAnnounced$ = this.pollingAnnouncedSource.asObservable();
// Service message commands
announcePolling(polling: object) {
this.pollingAnnouncedSource.next(polling);
}
}
听起来你可能有内存泄漏。手动生成的订阅通常需要手动清理。您的
polling\u sub
订阅永远不会被清除,也不会从您给定的代码中取消订阅
对于在pollingcallservice()
方法中生成的订阅,您没有提到任何unsubscribe
调用。如果尚未将此方法添加到该组件:
ngOnDestroy() {
this.polling_sub.unsubscribe();
}
我添加了更多的代码和我想做的全部目标。当由于takeWhile而满足条件时,代码会工作并停止执行,但是对于多个订阅,您在某个地方出现内存泄漏,没有适当地取消订阅,您似乎正在保存订阅,您是否正确地调用了unsubscribe?您是否能够将其压缩为一个?