내 서버에 "ping"하고 응답 시간을 반환하는 서비스를 사용하고 있습니다. 나는 이것을 차트에 표시한다.입력을 통해 관찰 가능 간격 변경
this.pingService.pingStream.subscribe(ping => {
this.ping = ping;
NTWDATA.datasets[0].data.pop();
NTWDATA.datasets[0].data.splice(0, 0, this.ping);
})
나는 "핑 (ping)"을 받고 있어요 : 이것은 내 app.component의 cunstructor에
Observable.interval(2500)
.subscribe((data) => {
let timeStart: number = performance.now();
this._http.get(this.url)
.subscribe((data) => {
let timeEnd: number = performance.now();
let ping: number = timeEnd - timeStart;
this.ping = ping;
this.pingStream.next(ping);
});
});
}
를 호출됩니다 : (간격을 변경할 수있는없이)
내 첫 번째 방법이 있었다 그것을 내 chartdata에 넣으십시오. 잘 작동합니다. 이제 intervall을 변경하고 싶습니다. 따라서 INTVL이라는 변수 만 내보내는 streamintervall.ts를 만들었습니다. 이 게시물의 답변을 사용하려 : 작동하지 않는 상태에서 이제 난 Change Intervall/settings of observable after creation
합니다. 내 차트 데이터는 0부터 세고 있습니다. 내 appcomponent에서
observable = this.pingStream.startWith(INTVL)
.switchMap((INTVL) => { return Observable.interval(INTVL) });
constructor(private _http: Http) {
this.observable.map((data) => {
let timeStart: number = performance.now();
this._http.get(this.url)
.subscribe((data) => {
let timeEnd: number = performance.now();
let ping: number = timeEnd - timeStart;
this.ping = ping;
this.pingStream.next(ping);
});
})
은 내가 2WAY가 intvl = INTVL에 바인딩 입력 - 텍스트 상자가 있습니다. rxjs는 들어 오기가 어렵 기 때문에 경험이 없기 때문에이 문제를 어떻게 처리해야할지 모르겠다. 자세한 도움말은 매우 감사하겠습니다.
자세한 정보가 필요하면 알려주십시오.
편집 : 두 번째 접근 방식 - 지금 입력 간격으로 버튼 클릭에 새로운 스트림을 만드는 오전 : pingservice.ts :
createNew(intvl: number) {
this.pingStream = new Subject<number>();
Observable.interval(intvl)
.subscribe((data) => {
let timeStart: number = performance.now();
this._http.get(this.url)
.subscribe((data) => {
let timeEnd: number = performance.now();
let ping: number = timeEnd - timeStart;
this.ping = ping;
this.pingStream.next(ping);
});
});
}
app.component.ts : 그래서
newSubscription() {
console.log(this.pingService.pingStream.isUnsubscribed);
if (!this.pingService.pingStream.isUnsubscribed) {
this.pingService.pingStream.unsubscribe();
}
if (this.pingService.pingStream.isUnsubscribed) {
this.pingService.createNew(this.intvl)
this.pingService.pingStream.subscribe(ping => {
this.ping = ping;
NTWDATA.datasets[0].data.pop();
NTWDATA.datasets[0].data.splice(0, 0, this.ping);
})
}
}
, pingService 작동을 멈추게되면, 새로운 Stream이 생성되고 올바른 Intervall을 사용합니다. 이제 또 다른 문제가 있습니다 : 새로운 것을 생성 한 후에 pingStream을 구독 할 때, 전에 생성 된 다른 모든 pingStream에도 가입 (또는 최소한 생각합니다)하여 데이터를 전달하는 여러 스트림으로 연결됩니다. 5 클릭 = 5 스트림. 스트림을 "파괴"하고 새로운 스트림을 만드는 방법이 있습니까?
당신이 [그 후]를 봤어 (http://stackoverflow.com/questions/34058398/change-interval-settings-of-observable-after-creation)? –
그래, 그것이 내 질문에 링크되어 있습니다. – Faigjaz
확인. 나는 문제가 무엇인지 알 것 같지만 뭔가 말하기 전에 그것을 재현 할 수 있기를 원한다. 플 런커를 만들 수 있습니까? –