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