我正在尝试弄清queueScheduler在rxjs(版本6.2.2)中如何工作。
我正在运行快递服务器,我想做的是接受多个请求,但是功能processMetricRequest2
一次只能处理一个项目,但是下面的代码...当我访问/test1
时连续两次,即使尚未完成,它也会调用processMetricRequest2
(webMetrics
函数需要几秒钟)。
关于我在做什么错的任何想法吗?谢谢!
router.get('/test1', function(req, res, next) {
let fn = partial(processMetricRequest2, req.query.input);
queueScheduler.schedule(fn);
res.render('index', { id: 1, current: {url: req.query.input}});
});
async function processMetricRequest2(url, arg) {
console.log('--processing:', url);
let result = await webMetrics(url);
console.log('--FINISHED: ', url);
return result;
}
答案 0 :(得分:1)
您可能想要一个队列并顺序处理请求。可以使用带有过程功能的Subject
和concatMap
来完成。 queueScheduler
的含义完全不同...
const { Subject } = require('rxjs');
const { concatMap } = require('rxjs/operators');
const queue = new Subject();
router.get('/test1', function(req, res, next) {
queue.next(req.query.input);
res.render('index', { id: 1, current: {url: req.query.input}});
});
async function processMetricRequest2(url) {
console.log('--processing:', url);
let result = await webMetrics(url);
console.log('--FINISHED: ', url);
return result;
}
queue
.pipe(concatMap(processMetricRequest2))
.subscribe();
如果发生错误,队列也将停止!订阅将终止。因此,您应该确保处理processMetricRequest2