我正在尝试弄清楚queueScheduler在rxjs (版本6.2.2)中是如何工作的。我正在运行一个express服务器,我想要做的是接受多个请求,但是函数processMetricRequest2
应该一次只处理一个项目,但是代码below...when我连续访问/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;
}
发布于 2018-08-16 23:43:40
您可能需要一个队列并串行地处理请求。这可以使用带有进程函数的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
中处理错误
https://stackoverflow.com/questions/51866699
复制相似问题