首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用RxJS创建队列

如何使用RxJS创建队列
EN

Stack Overflow用户
提问于 2018-08-16 05:28:14
回答 1查看 666关注 0票数 1

我正在尝试弄清楚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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 23:43:40

您可能需要一个队列并串行地处理请求。这可以使用带有进程函数的SubjectconcatMap来完成。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中处理错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51866699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档