【发布时间】:2020-05-05 12:43:34
【问题描述】:
我已使用此模式创建 ServerSentEvent 服务:Angular and Server Sent Events 这是服务代码:
import { Injectable, NgZone } from "@angular/core";
import { Observable } from "rxjs";
@Injectable({
providedIn: "root"
})
export class SseService {
constructor(private _zone: NgZone) { }
getServerSentEvent(url: string): Observable<any> {
return Observable.create(observer => {
const eventSource = this.getEventSource(url);
eventSource.onmessage = event => {
this._zone.run(() => {
observer.next(event.data);
console.log(event); // Here I see every received event
});
};
eventSource.onerror = error => {
this._zone.run(() => {
observer.error(error);
console.log(error);
});
};
// return () => eventSource.close();
});
}
private getEventSource(url: string): EventSource {
return new EventSource(url);
}
}
然后我在主组件中调用这个 ss-events 流:
ngOnInit() { //This subscribe works just for the first event no more
this.sseService.getServerSentEvent("http://localhost:8080/ssevents")
.subscribe(
data => {
this.eventmessage = data;
},
error => this.error = error
);
// But direct next EventSource onmessage() call works here:
this.source = new EventSource("http://localhost:8080/ssevents");
this.source.onmessage = event => {
this.zone.run(() => {
this.eventmessage = event.data;
console.log(event);
});
};
this.source.onerror = error => {
this.zone.run(() => {
this.error = error.type;
console.log(error);
});
};
}
为什么 sseservice 中的这个内部 observable 没有 作品?只是第一个。所以我需要使用第二个选项 - 但我在那里 收到永久错误 EventTarget(每秒或 半秒)没有理由 错误描述,除了 Type=error, EventPhase=2。但 接收到的事件,仅由服务器生成 插入 mongodb 后。
【问题讨论】:
-
请修正格式
-
我会很高兴 - 但如何呢?大概是第一个五花灰块不对,是不是第二个?例如,当添加代码块时 - Ctrl+ K 的安全性低于使用 {{ }} 来获得至少某种格式的文本块。而在第二个灰色块中,“”仍然围绕代码。
标签: angular observable eventsource