我在我的应用程序中使用SSE事件.为此,我编写了运行良好的代码.
我面临的问题是,我需要关闭连接后,一定时间手动让一些用户操作.我没有任何这样做的 Select .
虽然EventSource.Close()仍在使用中,但在Component中取消订阅它并不起作用.
下面是我的代码:
**服务业**
public getServerSentEventsForTokenDisplay(url: string): Observable<any> {
return Observable.create(observer => {
const eventSource: EventSourcePolyfill = this.getEventSource(url);
eventSource.addEventListener('XXX', (event: any) => {
observer.next(event);
});
eventSource.addEventListener('YYY', (event: any) => {
observer.next(event);
});
eventSource.addEventListener('Ack', (event: any) => {
observer.next(event);
});
eventSource.onerror = (error) => {
eventSource.close()
this.ngZone.run(() => observer.next(error));
};
eventSource.onopen = (event) => {
this.ngZone.run(() => observer.next(event));
};
});
}
加入时间:清华2007年01月25日下午3:33 这没什么不对的.
private getTokenDisplay(url) {
let url = url;
this.isWaitingTokensLoading = true;
this.isTokenDisplayLoading = true;
this.tokenDisplaySubscription = this.qmsService.getServerSentEventsForTokenDisplay(url).pipe(takeUntil(this.ngUnsubscribe)).subscribe((response: MessageEvent) => {
if (response && response.type === 'open') {
console.log(response)
}
if (response && response.type.toLowerCase() === 'ack') {
console.log(response)
}
if (response && response.type === 'XXX') {JSON.parse(response.data));
let parsedData = JSON.parse(response.data);
this.tokenDisplayList = parsedData.data;
this.isTokenDisplayLoading = false;
}
if (response && response.type === 'YYY') {
let parsedData = JSON.parse(response.data);
this.waitingTokens = parsedData.data;
this.isWaitingTokensLoading = false;
}
if (response && response.type === 'error') {
console.log(response);
}
}, (error) => {
this.isWaitingTokensLoading = false;
this.isTokenDisplayLoading = false;
console.log(error)
})
}
ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.unsubscribe();
if(this.tokenDisplaySubscription)
this.tokenDisplaySubscription.unsubscribe();
}`
我需要手动关闭SSE连接.