繁体   English   中英

如何以快速和角度流式传输响应?

[英]How do I stream response in express and angular?

我想在 Express 和 Angular 之间建立一个数据流,以便来自 Express 的部分响应可以立即到达并在 Angular 中处理(当我有一条数据时,我想将它发送到 Angular 并在那里处理它,而不是等待为完整的数据)。 不幸的是,响应并没有做出任何“部分”响应,而是将信息写入响应中,最后才将完整的信息发送到前端。 但是我需要持续的通信,其中部分信息会立即发送到前端。 我究竟做错了什么?

表达:

router.get("/getStreamedData", (request, response, next) => {

      response.setHeader('Content-Type', 'text/html; charset=utf-8');
      response.setHeader('Transfer-Encoding', 'chunked');

      console.log("Partial response 1");
      response.write("Partial answer 1");

      setTimeout(function () {
        console.log("Partial response 2");
        response.write("Partial answer 2");

        setTimeout(function () {
          console.log("Partial response 3");
          response.write("Partial answer 3");          
          setTimeout(function () {
            console.log("response end");
            response.end()  
          }, 5000)  
        }, 5000)
      }, 5000)

});  

角服务:

   getProduktdataDatastore(language: string){
      let params = new HttpParams().set('language', language);
      return this.http.get<any>(this.apiPath + 'getStreamedData',{params}).pipe(map(data => {console.log("data: ", data)}));
  }

角组件:

          this.WebGridService.getProduktdataDatastore(this.selectedLanguage)                   
            .subscribe(
              response => {
                console.log("responsedata: ", response)
              },
              error => {
                this.flagLoadData = false; 
                this.messageBox =  {messageBoxFlag: true,  text: error.error}  ;
              } 
            ) 

使用低级fetch API,您可以分块处理响应:

fetch(this.apiPath + "getStreamedData").then(function(response) {
  response.body.getReader().read().then(function({done, value}) {
    // value is one chunk of data
    // done = true if there is no more data
  });
});

另请参阅此示例

我不知道 Angular http方法是否也产生可读流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM