Rxjs 如何确保可观察流处理所有请求
我正在使用RxJS制作一个简单的Web服务器,但我不知道如何处理它 如果使用switchMap而不是我的第一个map,服务器将调用处理程序,该处理程序返回一个可观察的。但是,如果在第一个请求仍在接收数据的情况下出现另一个请求,服务器将切换到新请求,如果它在第一个请求之前完成,那么第一个请求将被删除,对吗 另一方面,如果我使用concatMap,它将调用处理程序,但在第一个处理程序接收到所有数据并继续之前,它不会使用更多的连接。这也没有意义,因为在处理快速连接(即GET请求)之前,服务器会在等待慢速连接(即POST文件上传)时空闲 我应该使用哪种操作符Rxjs 如何确保可观察流处理所有请求,rxjs,Rxjs,我正在使用RxJS制作一个简单的Web服务器,但我不知道如何处理它 如果使用switchMap而不是我的第一个map,服务器将调用处理程序,该处理程序返回一个可观察的。但是,如果在第一个请求仍在接收数据的情况下出现另一个请求,服务器将切换到新请求,如果它在第一个请求之前完成,那么第一个请求将被删除,对吗 另一方面,如果我使用concatMap,它将调用处理程序,但在第一个处理程序接收到所有数据并继续之前,它不会使用更多的连接。这也没有意义,因为在处理快速连接(即GET请求)之前,服务器会在等待慢
Observable.fromEvent(server, 'request', (req, res) => { return { req: req, res: res } })
//should this be a concatMap or switchMap or what?
.map(state => {
state.data = [];
return Observable.fromEvent(state.req, 'data')
.takeUntil(Observable.fromEvent(state.req, 'end'))
.reduce((n, e) => { n.push(e); return n; }, [])
.map(e => {
var buf = Buffer.concat(e).toString('utf8');
try {
state.req.body = JSON.parse(state.data);
} catch (e) {
state.req.body = data;
}
return state;
});
})
.do(obs => {
//I want to do the next thing here, but first I
//have to consume the Observable, which doesn't make sense
state.do(state => {})
})
是你要的接线员
与concatMap
不同,它不会等待每个内部可观察对象完成后再连接下一个。(实际上,concatMap
相当于。)是您想要的操作符
与
concatMap
不同,它不会等待每个内部可观察对象完成后再连接下一个。(事实上,concatMap
相当于。)@cartant,如果你这样回答,我会接受的。否则我会回答:)@cartant,如果你回答,我会接受。否则我会回答:)