Чтобы заархивировать эту цель, вам нужно реализовать связь в двух сервисах.
Это можно сделать с помощью простой очереди операций для обработки каждого запроса по порядку.Эффект контраргумента заключается в том, что запрос, ожидающий очередь, будет иметь задержанный ответ (и может произойти тайм-аут).
Простая реализация "мета":
const operationQueue = new Map();
const eventEmitter = new events.EventEmitter();
router.get('/addUser/:department', function(req, res) {
const customEvent = `addUser-${new Date().getTime()}`;
const done = () => {
res.send('done');
operationQueue.delete(customEvent);
};
eventEmitter.once(customEvent, done);
operationQueue.set(customEvent, () => addUser(customEvent, req));
})
router.get('/deleteUser/:department', function(req, res) {
const customEvent = `deleteUser-${new Date().getTime()}`;
const done = () => {
res.send('done');
operationQueue.delete(customEvent);
};
eventEmitter.once(customEvent, done);
operationQueue.set(customEvent, () => deleteUser(customEvent, req));
})
function addUser(customEvent, req){
// do the logic
eventEmitter.emit(customEvent, {done: true});
}
function deleteUser(customEvent, req){
// do the logic
eventEmitter.emit(customEvent, {done: true});
}
// not the best performance
setInterval(()=>{
const process = operationQueue.shift();
if(process) {
process();
}
}, 1);
Конечно, есливы будете использовать такие инструменты, как БД или очередь Redis, с точки зрения надежности и отработки отказа они могут лучше подходить к этому решению.