我正在构建一个节点应用程序,它将充当"工作者"来构建新应用程序,然后将应用程序上载到AWS.完成脚手架循环有5个任务.
我想知道Node/Express是否可以对传入的请求进行排队,然后在循环成功完成后启动队列中请求的脚手架循环.一次只能运行一个脚手架循环.
是的,你可以这样做.也许你当前的代码看起来像这样(我假设你正在使用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)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |