Rxjs 如何确保可观察流处理所有请求

Rxjs 如何确保可观察流处理所有请求,rxjs,Rxjs,我正在使用RxJS制作一个简单的Web服务器,但我不知道如何处理它 如果使用switchMap而不是我的第一个map,服务器将调用处理程序,该处理程序返回一个可观察的。但是,如果在第一个请求仍在接收数据的情况下出现另一个请求,服务器将切换到新请求,如果它在第一个请求之前完成,那么第一个请求将被删除,对吗 另一方面,如果我使用concatMap,它将调用处理程序,但在第一个处理程序接收到所有数据并继续之前,它不会使用更多的连接。这也没有意义,因为在处理快速连接(即GET请求)之前,服务器会在等待慢

我正在使用RxJS制作一个简单的Web服务器,但我不知道如何处理它

如果使用switchMap而不是我的第一个map,服务器将调用处理程序,该处理程序返回一个可观察的。但是,如果在第一个请求仍在接收数据的情况下出现另一个请求,服务器将切换到新请求,如果它在第一个请求之前完成,那么第一个请求将被删除,对吗

另一方面,如果我使用concatMap,它将调用处理程序,但在第一个处理程序接收到所有数据并继续之前,它不会使用更多的连接。这也没有意义,因为在处理快速连接(即GET请求)之前,服务器会在等待慢速连接(即POST文件上传)时空闲

我应该使用哪种操作符

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,如果你回答,我会接受。否则我会回答:)