如何通过HTTP流从后端异步发送数据?

时间:2019-12-04 17:33:16

标签: javascript node.js angular rxjs

我最近正在学习rxjs。我试图通过http流获取数据(异步地,在收到单个响应后不关闭流。我希望随着时间的推移从单个http请求获得多个响应)。因此,rxjs的UI代码将是这样,

this.http.get('https://...').subscribe(value => {
     ...
    });

但是我不知道如何通过后端的http响应异步发送数据。 http响应等待整个json完成,最终以单个响应发送整个数据。我不要如何对后端进行编码以尽快发送json数据,而不是等待获取所有数据并以[{..},{..},{..} .......]发送?

1 个答案:

答案 0 :(得分:0)

有一个带有标志的响应对象,以指示是否还有更多数据。

interface Response {
  payload: Payload,
  complete: boolean
}

然后,您的服务可以向服务器发出请求,并在服务器收到包含完全为false的数据后立即发送响应,您的服务将继续池化服务器,直到服务器以完全为true响应为止。

const { of } = rxjs;
const { switchMap, map } = rxjs.operators;

let i = 0;

const http = url => of({ payload: [i++], complete: i === 5 ? true : false });

const poll = () => http('url').pipe(
  switchMap(response => response.complete ? of(response) : poll().pipe(
    map(res => ({ payload: [...response.payload, ...res.payload], complete: res.complete }))
  ))
);

poll().subscribe(response => { console.log(response); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>