【问题标题】:SSE Emitter passing error in Angular ComponentAngular 组件中的 SSE 发射器传递错误
【发布时间】: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);在服务器上被调用?
  • 不,它没有被调用
  • 你可以尝试做同样的事情,但没有执行者。只需在发射器中发射你想要的一切并返回它
  • 我试过还是一样的错误。它被执行了四次,错误出现在角度

标签: angular spring-boot


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 2016-11-28
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2018-01-08
    • 2018-12-21
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多