Angular 组件中的 SSE 发射器传递错误
Posted
技术标签:
【中文标题】Angular 组件中的 SSE 发射器传递错误【英文标题】:SSE Emitter passing error in Angular Component 【发布时间】:2021-05-22 06:07:54 【问题描述】:我正在尝试在 Spring Boot 中实现 SSE(服务器端事件发射器)。应用程序在浏览器中运行良好,但是当我以 Angular 代码调用应用程序时,它最终出错了。 我的 Spring Boot 代码来自https://howtodoinjava.com/spring-boot2/rest/spring-async-controller-sseemitter/
@RestController
public class DataSetController
private final DataSetService dataSetService;
public DataSetController(DataSetService dataSetService)
this.dataSetService = dataSetService;
@GetMapping("/emit-data-sets")
public SseEmitter fetchData2()
SseEmitter emitter = new SseEmitter();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() ->
List<DataSet> dataSets = dataSetService.findAll();
try
for (DataSet dataSet : dataSets)
randomDelay();
emitter.send(dataSet);
emitter.complete();
catch (IOException e)
emitter.completeWithError(e);
);
executor.shutdown();
return emitter;
private void randomDelay()
try
Thread.sleep(1000);
catch (InterruptedException e)
Thread.currentThread().interrupt();
我的 Angular 代码来自此链接 https://bartoszgajda.com/2019/12/22/angular-and-server-sent-events-sse/
export class HomeComponent implements OnInit
constructor(private sseService: SseService)
ngOnInit()
this.sseService
.getServerSentEvent("http://localhost:8082/raw")
.subscribe(data => console.log(data),
error => console.log("The code errors out here")
);
响应来自控制台,如下所示
请帮助我,为什么代码最终会出错?服务器代码在浏览器中运行良好,这是 Angular 还是 Spring Boot 的问题?
【问题讨论】:
是emitter.completeWithError(e);在服务器上被调用? 不,它没有被调用 你可以尝试做同样的事情,但没有执行者。只需在发射器中发射你想要的一切并返回它 我试过还是一样的错误。它被执行了四次,错误出现在角度 【参考方案1】:我使用这里提到的链接解决了它
https://octoperf.com/blog/2019/10/09/kraken-server-sent-events-reactive/#sse-and-angular
【讨论】:
以上是关于Angular 组件中的 SSE 发射器传递错误的主要内容,如果未能解决你的问题,请参考以下文章
将数据传递到 Angular1 应用程序中的降级 Angular2 组件