Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angular2和我的服务公告执行多次_Angular - Fatal编程技术网

angular2和我的服务公告执行多次

angular2和我的服务公告执行多次,angular,Angular,我不明白 这就是我想要做的。我在api服务器上运行一个模型,运行大约需要5-10分钟。因此,我轮询api服务器以确定它何时完成,然后我将添加代码以触发一个snackbar,表明模型已完成 1) 在我的应用程序组件中,我订阅了一项服务,该服务将侦听来自其他组件的公告 app.component.ts ngOnInit(){ this.polllingCallService() } polllingCallService(){ this.polling_sub = this.po

我不明白

这就是我想要做的。我在api服务器上运行一个模型,运行大约需要5-10分钟。因此,我轮询api服务器以确定它何时完成,然后我将添加代码以触发一个snackbar,表明模型已完成

1) 在我的应用程序组件中,我订阅了一项服务,该服务将侦听来自其他组件的公告 app.component.ts

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?您是否能够将其压缩为一个?