Ответ 1
Да, вы можете это сделать. Возможно, ваш текущий код выглядит примерно так (я предполагаю, что вы используете promises):
app.get('/', function (req, res) {
scaffold().then(function() {
res.send('done');
});
});
Мы будем использовать promise-queue для упрощения. Сначала нам нужно создать очередь:
var queue = new Queue(1);
Аргумент - это количество элементов, которые очередь будет запускаться одновременно. Поскольку вы не хотите concurrency, мы используем 1
. Теперь нам нужно выполнить обещание factory вместо выполнения обещания:
app.get('/', function (req, res) {
queue.add(function() {
return scaffold().then(function() {
res.send('done');
});
});
});
Если мы просто передадим обещание, оно начнется немедленно. Вот почему мы должны передать функцию, которая возвращает обещание.
Если вы хотите немедленно ответить на запрос и не дождаться завершения задачи, вы можете переместить ее за пределы обещания factory. Это также позволяет нам избежать дополнительной анонимной функции, так как теперь scaffold
- это обещание factory, которое мы хотим поставить в очередь.
app.get('/', function (req, res) {
queue.add(scaffold);
res.send('done');
});