Node中的队列任务

lea*_*rrr 11 node.js express

我正在构建一个节点应用程序,它将充当"工作者"来构建新应用程序,然后将应用程序上载到AWS.完成脚手架循环有5个任务.

我想知道Node/Express是否可以对传入的请求进行排队,然后在循环成功完成后启动队列中请求的脚手架循环.一次只能运行一个脚手架循环.

Aar*_*our 6

是的,你可以这样做.也许你当前的代码看起来像这样(我假设你正在使用promises):

app.get('/', function (req, res) {
  scaffold().then(function() {
    res.send('done');
  });
});
Run Code Online (Sandbox Code Playgroud)

我们将使用promise-queue来简化操作.首先,我们需要创建一个队列:

var queue = new Queue(1);
Run Code Online (Sandbox Code Playgroud)

参数是队列将同时运行的项目数.由于您不需要并发,我们使用1.现在,我们需要传递一个promise工厂而不是运行一个promise:

app.get('/', function (req, res) {
  queue.add(function() {
    return scaffold().then(function() {
      res.send('done');
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

如果我们只是传递了一个承诺,它会立即开始.那就是为什么我们必须传递一个返回承诺的函数.

如果您想立即响应请求而不是等待任务完成,您可以将其移到promise工厂之外.这也允许我们避免额外的匿名函数,因为现在scaffold是我们想要排队的promise工厂.

app.get('/', function (req, res) {
  queue.add(scaffold);
  res.send('done');
});
Run Code Online (Sandbox Code Playgroud)