我最近正在学习rxjs。我试图通过http流获取数据(异步地,在收到单个响应后不关闭流。我希望随着时间的推移从单个http请求获得多个响应)。因此,rxjs的UI代码将是这样,
this.http.get('https://...').subscribe(value => {
...
});
但是我不知道如何通过后端的http响应异步发送数据。 http响应等待整个json完成,最终以单个响应发送整个数据。我不要如何对后端进行编码以尽快发送json数据,而不是等待获取所有数据并以[{..},{..},{..} .......]发送?
答案 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>