2016-03-18 2 views
2

У меня есть клиенты, отправляющие задачи, которые должен выполнять сервер, но эти запросы должны обрабатываться в очереди как мода. Любая идея, как я могу это сделать? Благодарю.Бэкэнд ExpressJS отправляет запросы в очередь

express.Router().post('/tasks', function(req, res){ 
 
     //This is the task to perform. While being performed, another user 
 
     //might send a request AND should only be processed when this is done. 
 
     //This should also flag the pending task if it is completed. 
 

 
     Promise.resolve(req.body) 
 
     .then(function() { 
 
     //.. 
 
     }) 
 
     .catch(function(error) { 
 
     //.... 
 
     }) 
 

 
    })

+0

посмотреть [здесь] (https://www.npmjs.com/p ackage/Bluebird-очереди) – Satyajeet

ответ

2

Конечно, это довольно просто, скажем, у вас есть функция, которая возвращает fn обещание.

var res = fn(req.body); // returns the appropriate promise 

И вы хотите добавить в него очередность. Вы должны сделать что-то вроде:

  • Украсить fn с fnQueued таким образом, что, когда fnQueued называется мы:
    • Создать новое обещание для значения.
    • Queue работа

К счастью для нас, это довольно много, что обещает уже делать с then поэтому мы можем использовать его вместо реализации нашей собственной организации очереди логики:

function queue(fn) { 
    var queue = Promise.resolve(); // create a queue 
    // now return the decorated function 
    return function(...args) { 
     queue = queue.then(() => { // queue the function, assign to queue 
      return fn(...args); // return the function and wait for it 
     }); 
     return queue; // return the currently queued promise - for our argumnets 
    } 
} 

Этот позволили бы нам сделать что-то вроде:

var queuedFn = queue(fn); 

express.Router().post('/tasks', function(req, res) { 
    queuedFn(req.body).then(v => res.json(v), e => res.error(e)); 
}); 
Смежные вопросы